首页 > 解决方案 > JS中的数组拆分无法按预期工作

问题描述

我有以下代码,console.log 只是为了显示发生了什么

function splitToChunks(array, parts) {
  let result = new Array(parts).fill([]);
  array.map((e,i)=> {console.log("r[",i%parts,"] gets -> ", e )|| result[i%parts].push(e)})
  return result;
}

测试arr = [0...11]

结果

预期的结果是:

 [
  [0, 4, 8],
  [1, 5, 9],
  [2, 6, 10],
  [3, 7, 11],
 ]

标签: javascriptarrayssplit

解决方案


这里的问题是fill()数组方法通过引用而不是值传递,因此实际上是完全相同的“深层”对象传递给每个子数组,而不是每次都传递新对象。

一个快速的解决方法是先使用fill(),然后map()使用新数组:

function splitToChunks(array, parts) {
  let result = Array(parts).fill().map(e => []);
  array.map((e,i) => { result[i % parts].push(e) });
  return result;
}

推荐阅读