我正在尝试编写一个for循环,将一个数组(参数:arr)拆分为给定大小的子数组(参数:size),但它似乎提前退出for循环/不实际循环返回in。
此代码应返回[['a', 'b'] ['c', 'd']]
,但现在只返回[['a', 'b']]
。
我已经尝试过研究,但是我无法确定代码中的什么是阻止循环返回数组。
function chunkArrayInGroups(arr, size) {
var newArr = [
[]
];
for (var i = 0; i < arr.length; i++) {
newArr[0].push(arr.shift(arr.slice(i, size)));
}
return newArr;
}
//calling the function:
console.log(chunkArrayInGroups(['a', 'b', 'c', 'd'], 2));
请帮我解决这个问题。
答案 0 :(得分:1)
您可以使用{
"MyService": {
"ConnectionString": "…"
},
// …
}
循环并根据数组的长度检查位置。
while
&#13;
function chunkArrayInGroups(array, size) {
var result = [],
i = 0;
while (i < array.length) {
result.push(array.slice(i, i += size));
}
return result;
}
console.log(chunkArrayInGroups(['a', 'b', 'c', 'd'], 2));
&#13;
答案 1 :(得分:0)
在包含i
的for循环增量size
中。在每个迭代切片上,长度为size
的数组(i
和i + size
之间),并将其推送到newArr
:
function chunkArrayInGroups(arr, size) {
var newArr = [];
for (var i = 0; i < arr.length; i += size) {
newArr.push(arr.slice(i, i + size));
}
return newArr;
}
//calling the function:
console.log(chunkArrayInGroups(['a', 'b', 'c', 'd'], 2));
答案 2 :(得分:0)
当你循环遍历数组时,你正在修改数组,因为arr.shift()
从数组中删除第一个元素并返回它。您将删除的元素推送到newArr[0]
,而不是切片。
所以在循环的第一次迭代中,arr
是:
['a', 'b', 'c', 'd']
您将'a'
推送到结果数组,将其从arr
中移除,然后递增i
。
在下一次迭代中,arr
是
['b', 'c', 'd']
您将'b'
推送到结果数组,将其从arr
中移除,然后递增i
。
在下一次迭代中,arr
是
['c', 'd']
i
现在为2
,不小于arr.length
,因此循环结束。
没有理由使用arr.shift()
,只需使用arr.slice()
来获取块。您需要按块大小迭代,而不是1.并且slice()
的第二个参数是结束位置(不包括),而不是大小,因此您需要添加i + size
。
function chunkArrayInGroups(arr, size) {
var newArr = [
[]
];
for (var i = 0; i < arr.length; i += size) {
newArr[0].push(arr.slice(i, i+size));
}
return newArr;
}
//calling the function:
console.log(chunkArrayInGroups(['a', 'b', 'c', 'd'], 2));