function chunk(arr, size) {
var newr = [];
var temp = [];
for (var i = 0; i < arr.length; i++) {
if (temp.length != size) {
temp.push(arr[i]);
} else {
newr.push(temp);
temp = [];
}
}
return newr;
}
chunk(['a', 'b', 'c', 'd'], 2);
有人可以帮助我,为什么我的代码不起作用?它只显示第一个数组并忽略第二个数组。
答案 0 :(得分:0)
以下是使用Array.splice()
执行此操作的一种有效方式:
function chunk(arr, size) {
var out = [];
while(arr.length) out.push(arr.splice(0, size));
return out;
}
致电chunk(['a', 'b', 'c', 'd'], 2);
将返回:
[
["a", "b"],
["c", "d"]
]
注意:上面的方法将修改传递给函数的原始数组。
答案 1 :(得分:0)
要修复您的代码,请尝试
function chunk(arr, size) {
var newr = [];
var temp = [];
for (var i = 0; i < arr.length; i++) {
temp.push(arr[i]);
if(temp.length==size || i==arr.length-1) {
newr.push(temp);
temp = [];
}
}
return newr;
}
chunk(['a', 'b', 'c', 'd'], 2); // results in [['a','b'],['c','d']]
chunk(['a', 'b', 'c', 'd', 'e'], 2); // results in [['a','b'],['c','d'],['e']]
为什么以前的代码不起作用
你的病情很好。最后一次迭代确实正确收集['c','d']
中的最后一个块temp
,但它没有添加到newr
列表中。因此,在我的代码中进行了一些修改以解决这个问题,如上所示。