Почему метод filter не фильтрует 0?
Есть такой код:
function filter_list(arr) {
return arr.filter(item => {
if (typeof (item) == 'number') return item; // [1, 2]
})
}
console.log(filter_list([1, 2, 0, 'a', 'b']));
Метод filter пропускает 0, даже если написать так:
|| item == 0
Ответы (2 шт):
Автор решения: nörbörnën
→ Ссылка
callback
Функция, которая будет вызвана для каждого элемента массива. Если функция возвращает true, то элемент остаётся в массиве, если false, то удаляется.
В filter в случае когда item === 0 выражение return item будет интерпретировано как return false.
Нужно написать так:
function filter_list_like_in_question(arr) {
return arr.filter((item) => {
if (typeof(item) === 'number') {
return true;
}
});
}
function filter_list(arr) {
return arr.filter(item => typeof(item) === 'number')
}
console.log(filter_list_like_in_question([1, 2, 0, 'a', 'b']));
console.log(filter_list([1, 2, 0, 'a', 'b']));
Автор решения: Vasily
→ Ссылка
Вам не нужно делать return explicitly, в противном случае, при варианте нуля он будет интерпретирован как false.
Достаточно сформировать условие при котором элементы будут оставлены в массиве:
function filter_list(arr) {
return arr.filter(item => typeof item === "number")
}
const result = filter_list([1, 2, 0, -1, "a", "b"])
console.log(result)
// [1, 2, 0, -1]