2015-06-07 11 views
-2
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

Вот один эффективный способ сделать это с помощью 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"] 
] 

Примечание: Вышеуказанный метод будет модифицировать исходный массив, который передается в функцию.

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. Таким образом, небольшая модификация для покрытия этой проблемы производится в моем коде, как показано выше.

Смежные вопросы