嵌套的 forEach 在 Javascript 中没有按预期工作
Nested forEach does not work as expected in Javascript
我在使用此功能时遇到问题,它的工作方式应该与 Lodash 相同 _.zip([arrays])
简而言之,zip(['a', 'b'], [1, 2], [true, false]);
应 return [['a', 1, true], ['b', 2, false]]
我的函数:
function zip(...array) {
const newArr = Array(array[0].length).fill([]);
array.forEach((el, i) => {
el.forEach((item, idx) => {
// newArr[idx][i] = item;
newArr[idx].push(item);
});
});
return newArr;
}
相反,它 returns: [ [ 'a', 'b', 1, 2, true, false ], [ 'a', 'b', 1, 2, true, false ] ]
哪里写错了?
当您调用 fill
时,您正在用相同的数组填充数组,因此当您推送到索引 0 处的数组时,您也会推送到索引 1 处的数组。您可以通过以下方式解决此问题首先填充数组,然后调用 map
.
您还应该遍历新数组中的每个项目,然后遍历每个参数并在外循环的索引处获取该项目。
function zip(...array) {
const newArr = Array(array[0].length).fill().map(u => ([]));
newArr.forEach((item, i) => {
array.forEach((a) => {
item.push(a[i])
})
})
return newArr;
}
console.log(JSON.stringify(zip(['a', 'b'], [1, 2], [true, false])))
我在使用此功能时遇到问题,它的工作方式应该与 Lodash 相同 _.zip([arrays])
简而言之,zip(['a', 'b'], [1, 2], [true, false]);
应 return [['a', 1, true], ['b', 2, false]]
我的函数:
function zip(...array) {
const newArr = Array(array[0].length).fill([]);
array.forEach((el, i) => {
el.forEach((item, idx) => {
// newArr[idx][i] = item;
newArr[idx].push(item);
});
});
return newArr;
}
相反,它 returns: [ [ 'a', 'b', 1, 2, true, false ], [ 'a', 'b', 1, 2, true, false ] ]
哪里写错了?
当您调用 fill
时,您正在用相同的数组填充数组,因此当您推送到索引 0 处的数组时,您也会推送到索引 1 处的数组。您可以通过以下方式解决此问题首先填充数组,然后调用 map
.
您还应该遍历新数组中的每个项目,然后遍历每个参数并在外循环的索引处获取该项目。
function zip(...array) {
const newArr = Array(array[0].length).fill().map(u => ([]));
newArr.forEach((item, i) => {
array.forEach((a) => {
item.push(a[i])
})
})
return newArr;
}
console.log(JSON.stringify(zip(['a', 'b'], [1, 2], [true, false])))