2016-09-12 4 views
-1

Эта функция предназначена для создания среза массива, а push - бесконечного цикла. Кто-нибудь может это оправдать.Почему это для цикла является бесконечным циклом, несмотря на условие?

function MyFunction(arr, size) { 
    var newArr = []; 

    for(var i=0; i<arr.length; i+size)  
    { 
    newArr.push(arr.slice(i,i+size)); 

    } 
    return newArr; 
} 

Я могу достичь своего требования с помощью цикла while, хотя кажется почти таким же.

function MyFunction(arr, size) { 
    var newArr = []; 
    var i = 0; 
    while(i < arr.length)  
    {  
    newArr.push(arr.slice(i,i+size)); 
    i = i + size; 
    } 
    return newArr; 

} 

Пример ввода: - туРипсЫоп ([ "а", "б", "в", "г"], 2);

Пример вывода: - [[ "а", "б"], [ "с", "d"]]

+0

'я + size' не меняет' i'. 'i + = size' делает. – Xufox

+0

Просто сравнивая два подхода, вы можете определить проблему в 1-м подходе. – Harshal

ответ

1

В ваш цикл вы никогда не увеличивающиеся вашей переменной i. Вот и все. i++ auto increments i но i+size нет.

его должно быть i=i+size или i+=size;

Надеюсь, это поможет.

Редактировать

Ваш цикл должен быть: -

function MyFunction(arr, size) { 
    var newArr = []; 

    for(var i=0; i<arr.length; i = i+size)  
    { 
    newArr.push(arr.slice(0,size)); 

    } 
    return newArr; 
} 
10

i+size Я думаю, должно быть i += size или i = i + size.

В первом цикле вы никогда не увеличиваете i.

EDIT

Вы также можете изменить тело цикла, чтобы соответствовать петле while тоже.

Е.Г., положить все это вместе, это for цикл должен быть эквивалент вашей while цикла:

for (var i = 0; i < arr.length; i += size) { 
    newArr.push(arr.slice(i, i + size)); 
} 
+0

Спасибо, я удалил оператор break; – RanchiRhino

+0

@ RanchiRhino Могу ли я спросить, почему вы приняли другой (более поздний) ответ вместо моего? Два ответа почти идентичны. – smarx

+0

Стартеру нужна была мотивация, я думаю ..... – RanchiRhino

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