Удаление ложных значений из массива - PullRequest
0 голосов
/ 24 декабря 2018

Я учусь в freeCodeCamp и в настоящее время изучаю основные алгоритмы.Я делаю упражнение на вышибание, при котором вам нужно удалить все ложные значения из массива.К сожалению, был только расширенный ответ для задачи, который использует метод filter ().Я решил сделать основной, но в настоящее время застрял.

function bouncer(arr) { 

//*loops through array*    

for (let i = 0; i < arr.length; i++) {  

// *if there is a value that is falsy, delete that value from the array*    

if (arr[i] == 0 || arr[i] == NaN || arr[i] == null || arr[i] == false || arr[i] == "" || arr[i] == undefined) {        

delete arr[i];

     }    

   }    

return arr;

} 

console.log(bouncer([7, "ate", "", false, 9]));

Возвращает:

7, съел ,,, 9.

Функция действительно удалила ложные значения, но у меня остались эти три периода (,,,).Есть ли способ заставить эту функцию работать более правильно и возвращать истинные значения без этих периодов, не теряя простоту функции?Ценю твою помощь.

Ответы [ 4 ]

0 голосов
/ 24 декабря 2018

Это будет делать

var m = arr.filter(Boolean);
0 голосов
/ 24 декабря 2018

Delete работает только на Object.

Просто вы можете сделать это так, поскольку вы хотите использовать простой цикл for

function bouncer(arr) {
let op =[];
for (let i = 0; i < arr.length; i++) {
  if(arr[i]){
    op.push(arr[i]);
  }
}
return op;
}

console.log(bouncer([7, "ate", "", false, 9]));
0 голосов
/ 24 декабря 2018

Поскольку вы новичок в Javascript и вам нужен ваш код для работы, отличной от другого решения, вы можете сделать это

удалить delete arr[i]; и заменить его на arr.splice(i,1); i--;

Этоудалит элемент в i-й позиции, а 1 означает 1 элемент из i-й позиции.Так как элемент в i -ой позиции удален и там есть новый элемент.Нам нужно продолжить снова оттуда.Поэтому нам нужно добавить i--.В противном случае на следующей итерации он будет начинаться со следующего элемента вместо i -ой позиции.

function bouncer(arr) {
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] == 0 || Number.isNaN(arr[i]) || arr[i] == null || arr[i] == false || arr[i] == "" || arr[i] == undefined) {
            arr.splice(i, 1);
            i--;
        }
    }
    return arr;
}

console.log(bouncer([7, NaN, "ate", "", false, 9]));
0 голосов
/ 24 декабря 2018

delete работает только на объектах.filter будет делать то, что вы хотите:

const arr = [7, "ate", "", false, 9]

console.log(arr.filter(x => x))

filter сохраняет только те элементы в массиве, для которых функция возвращает true - здесь я использую x => x, потому что вы хотите только истинные элементы

...