嵌套的 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])))