2017-01-19 5 views
-2

Я сделал рекурсивную функцию в javascript, которая отфильтровывает строки из введенного массива. Почему он проходит через цикл for 3 дополнительных времен?

function filter_list(l) { 
 

 
    var count = l.length; 
 
    console.log('the count is:', count); 
 

 
    function loop() { 
 
    for (var i = 0; i < count; i++) { 
 
     var type = (typeof l[i]); 
 

 
     if (type == 'string') { 
 
     l.splice(i, 1); 
 
     console.log('the list is', l); 
 
     filter_list(l); 
 
     } else { 
 
     console.log('this item is', l[i], 'the list is', l); 
 
     } 
 
    } 
 
    } 
 

 
    loop() 
 
} 
 

 
filter_list([1, 2, 'a', 'c', 'd']);

По существу, это получить работу, однако для окончательного цикл, я не знаю, почему он проходит через него 3 дополнительных раз? Кто-нибудь сможет пролить свет на это?

+0

вы изменить массив с 'splice', но' count' остается неизменным. – usr2564301

+0

, если вы соединяете элементы с массивом, вам лучше пересечь список в обратном порядке, тем самым вы не пытаетесь получить доступ к элементу по индексу, который не существует, поскольку почему он работает несколько раз .. когда вы вызываете 'filter_list (l)' внутри вашего оператора if, вы начинаете цикл снова и снова, лучше либо переходить в обратном порядке, как указано выше, либо помещать оператор 'break' после вызова' filter_list (l) ', который предотвратит продолжение цикла for – haxxxton

+0

Почему вы одновременно используете итерацию и рекурсию? Сделайте то или другое, а не то и другое. – Barmar

ответ

0

Я знаю, что это не является прямым ответом на ваш вопрос, но если все, что вам нужно сделать, это строки фильтра из массива, вы можете легко сделать это с Array.prototype.filter():

[1, 2, 'a', 'c', 'd'].filter(function(i) { return typeof i !== 'string' }); 

JSFiddle

Или, если вы хотите сохранить его как отдельную функцию:

function filter_list(array) { 
    return array.filter(function(i) { return typeof i !== 'string' }); 
} 
+0

Очень полезно, что касается решения исходной проблемы. Большое спасибо! –

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

  • Нет связанных вопросов^_^