Задать вопрос
@nurdus

Почему array.filter игнорирует значение 0 (не индекс)?

Добрый вечер.
Столкнулся со странным поведением array.filter() может я что-то путаю:
const xArray = [0, 1, 2, 3, 4, 5];
let xArray2 = xArray.filter((x) => {
  if (0 <= x && x <= 10) {
    console.log('x ' + x); // тут 0 обрабатывается
    return x;
  }
});
console.log(xArray2); // [1, 2, 3, 4, 5]
xArray3 = []
for(i = 0; i < xArray.length; i++) {
  if (0 <= xArray[i] && xArray[i] <= 10) {
    xArray3[i] = xArray[i];
  }
}
console.log(xArray3); // [0, 1, 2, 3, 4, 5]

Почему filter игнорирует значение "0"? Если вместо "0" поставить что-то другое, то всё ок.
https://jsfiddle.net/nurdus/hhk438sm/2/
  • Вопрос задан
  • 144 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
1) непонятно что вы хотите получить на выходе
2) коллбэк должен возвращает boolean значение, если это true, то item остается, а если это false, то "удаляется", а если мы вернем 0, то к ему оно будет приведено, верно, к false,

const xArray = [-1, 0, 1, 2, 3, 4, 5, 11];
let xArray2 = xArray.filter((x) => {
  return 0 <= x && x <= 10;
});
xArray2;  // [0, 1, 2, 3, 4, 5]
Ответ написан
@kttotto
пофиг на чем писать
Он 0 воспринимает как false, поэтому исключает его из результата фильтра. Используй строгую проверку ===.
Тут
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы