以下是代码:
function chunkArrayInGroups(arr, size) {
// Break it up.
var newArr =[];
for(var i = 0;i < arr.length;i++){
for(var j = 0;j < size;j++){
newArr.push(arr.splice(0,size));
}
}
var result = [];
for(i = 0;i < newArr.length;i++){
if(newArr[i].length != 0){
result.push(newArr[i]);
}
}
return result;
}
chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7,8], 2);
这应该返回 - [[0, 1], [2, 3], [4, 5], [6, 7], [8]]
。但是,代码返回[[0, 1], [2, 3], [4, 5], [6, 7]]
。另外,如果我的输入数组是([0,1,2,3,4,5,6,7,8,9,10],2),我的代码将按预期返回。
P.S:我特意想找到这个代码的错误,而不是完全不同的代码/方法。
答案 0 :(得分:1)
基本上你只需要一个循环,因为你拼接了数组并获取了一大块所需的大小。
此行为可用于循环,直到数组的长度为零并退出循环。
在这种情况下,结果已准备就绪。
function chunkArrayInGroups(arr, size) {
var newArr = [];
// for (var i = 0; i < arr.length; i++) {
while (arr.length) { // add this for looping and checking
// for (var j = 0; j < size; j++) {
newArr.push(arr.splice(0, size)); // keep this for doing the work!
// }
}
// var result = [];
// for (i = 0; i < newArr.length; i++) {
// if (newArr[i].length != 0) {
// result.push(newArr[i]);
// }
// }
// return result;
return newArr; // return only newArray
}
console.log(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 1 :(得分:0)
您可以执行以下操作:
var size = 2;
var arr = [0,1,2,3,4,5,6,7,8];
var newArray = [];
for(var i = 0; i < arr.length; i+=size){
newArray.push(arr.slice(i,i+size))
}
console.log(newArray); //will output [[0,1],[2,3],[4,5],[6,7],[8]]
答案 2 :(得分:0)
你的问题是你没有处理数组中剩余数量小于给定arr.length < size
的情况,换句话说是function chunkArrayInGroups(arr, size) {
// Break it up.
var newArr =[];
while(size<arr.length){
newArr.push(arr.splice(0, size ));
}
if(arr.length<size){
newArr.push(arr);
}
}
时的情况,所以数组中剩余的项目赢了在块数组中不予考虑。
您需要对其进行测试,我更新了您的代码,使其完美运行:
function chunkArrayInGroups(arr, size) {
// Break it up.
var newArr =[];
while(size<arr.length){
newArr.push(arr.splice(0, size));
}
if(arr.length<size){
newArr.push(arr);
}
return newArr;
}
console.log(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7,8], 2));
<强>演示:强>
result
注意:强>
不需要使用newArr
数组,因为它只是newArr
的副本,您只需返回rundll32.exe python27.dll,PyRun_SimpleString "import myScript.py"
而不复制它。