Вывод результата функции во время ее исполнения js

Пытаюсь сделать кату(codewars), где нужно вывести из массива все числа, а строки удалить, написал код

function filterlist(l) {
    for (let i = 0; i < l.lenght; i++){
      if (typeof l[i]  == 'string'){
        l.splice(i, 1);
        i--;
      }
    }
    console.log(l); //Если отпрашивать функции тут, я получаю изначальный элемент
  }

 let c = (filterlist([1,2,'a','b']),[1,2]);

console.log(c); //А если тут, я получаю строку уже обработанную.

Как я понимаю, по решению каты, нужно сделать return с массивом, когда он уже изменен, но если делать это после исполнение функции, я получаю стартовый массив, а если сделать после функции, я получаю ошибку.


Ответы (1 шт):

Автор решения: Aziz Umarov

У вас ошибка Array.length. вы написали lenght.

Предлагаю сделать так и не мучатся

let c = [1,2,'a','b'].filter(i => typeof i  != 'string');

console.log(c);

а если хотите мучаться то так. Перебирайте массив с конца если удалять из него элементы

function filterlist(l) {
    for (let i = l.length - 1 ; i > 0 ; i--){
      if (typeof l[i]  === 'string'){        
        l.splice(i, 1);
      }
    }
   return l;
}

let c = filterlist([1,2,'a','b']);

console.log(c); //А если тут, я получаю строку уже обработанную.

По поводу вывода

function filterlist(l) {
    for (let i = l.length - 1 ; i > 0 ; i--){
      if (typeof l[i]  === 'string'){
        console.log(l);
        l.splice(i, 1);
      }
    }
   return l;
}

let c = filterlist([1,2,'a','b']);

console.log(c); //А если тут, я получаю строку уже обработанную.

→ Ссылка