如何基于另一个数字数组对数组进行分块



我有一个数据数组和一个对象数组:

const data = ['1', '2', '2'];
const objlist = [{name : 'dummy'} , {name: 'new'}, {name : 'news'}, {name : 'place'}, ...]; // 5 objects

我想用data中的数字对objlist中的对象进行分组,这样我就得到了以下结果:

result = [
[{name:'dummy'}], 
[{name:'new'}, {name:'news'}],
[{name : 'place'}, ...]
]

正如你所看到的,它应该是形式:

[[{obj1}], [{obj2}, {obj3}], [{obj4}, {obj5}]]

您可以将切片零件推送到结果中。

let array = [1, 2, 2],
objlist = [{ name: 'dummy' }, { name: 'new' }, { name: 'news' }, { name: 'place' }, { name: 'place' }],
result = [],
i = 0,
j = 0;

while (j < array.length) {
result.push(objlist.slice(i, i += array[j++]));
}
console.log(result);

您可以在数字数组中循环,对于每个数字n,使用.splice(0, n)从对象数组中获取数组块。这将在适当的位置修改数组,允许您的下一个.splice()获得下一个连续对象。对于执行的每个.splice(),可以将其.push()转换为一个结果数组。

参见以下示例:

function partition([...arr], chunks) {
const res = [];
for(const n of chunks)
res.push(arr.splice(0, n)); // +n to turn the string number into a number (splice will do this conversion for you but you can take care of it explicitly as well)
return res;
}
const chunkArr = ['1', '2', '2'];
const arr = [{ name : 'dummy' }, {name: 'new' }, { name : 'news'},{name : 'place'}, {name : 'foo'}];
console.log(partition(arr, chunkArr));

上面我使用的是partition([...arr], chunks),它使用析构函数赋值语法来执行输入数组的浅拷贝。这样,当您在函数中使用.splice()修改它时,它不会更改传入的数组。

相关内容

最新更新