Как отфильтровать 0 с помощью фильтра массива Javascript? - PullRequest
0 голосов
/ 13 апреля 2019

Мне нужно получить новый массив, который включает в себя все 0 из входного массива (обр).

var a=arr.filter(function(val){
if((val===0)){
return val;
}
})

по некоторым причинам это возвращает пустой массив, в то время как, например, если я пытаюсь получить все не 0 в массиве

var a=arr.filter(function(val){

    if(!(val===0)){
    return val;
    }
    })

, этот код работает отлично.

почему?

1 Ответ

2 голосов
/ 13 апреля 2019

Давайте пройдемся по ним, но сначала нам нужно взглянуть на определение истины / фальши

Из Документы MDN : В JavaScript истинное значение - это значение, которое считается истинным, когда встречается в логическом контексте. Все значения являются достоверными, если они не определены как ложные (т. Е. За исключением false, 0, "", null, undefined и NaN).


Ваш первый пример:

if((val===0)){
   return val;
}

Первый возвращает только нули, и вы возвращаете эти нули. Ноль - это ложь, поэтому они исключены.

Нет возврата для других значений, а функция без явного оператора return всегда возвращает undefined ... что неверно.

Таким образом, оба условия возвращают ложь, и результатом является пустой массив

Второй пример

if(!(val===0)){
   return val;
}

Возвратитесь за что-либо кроме нуля и верните значение.

Все ненулевые числа являются правдивыми, поэтому вы получаете все из них в своем массиве.

Нули исключаются из-за отсутствия явного возврата, возвращающего неопределенное значение снова


Как отфильтровать, чтобы получить ненулевые значения с правильным значением true / false?

 return val !== 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...