我有一个数据数组和一个对象数组:
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()
修改它时,它不会更改传入的数组。