javascript - 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],
]
解决方案
这里的问题是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;
}
推荐阅读
- collision - P5.JS:碰撞?
- excel - 在一个主 Excel 2013 中创建跨 12 个工作簿的数据副本
- spring-batch - 如何在spring批处理中按顺序划分串行步骤
- php - 公共函数返回 NULL 而不是数组
- mysql - SQL 填充常量 Incase 连接两个表时不匹配
- javascript - 包装函数的示例 Jest 单元测试
- cordova - 适用于 iOS 和 Android 的智能手表通知 Cordova 插件
- c# - 邮递员将日期时间显示为未知格式
- php - 使用 Wordpress 中的查询字符串在 wp 查询中进行多个搜索查询
- asp.net - asp.net:如何与 javascript 交换信息?