Фильтр работает не так, как ожидалось, с 0 в массиве.Javascript - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть массив случайных целых чисел, таких как: [ 1, 2, 3, 4, 0 ], мне нужно вернуть новый массив из нечетных или четных чисел в зависимости от условия wanted.

Я попробовал следующий метод фильтрации:

const result = array.filter(item => {
    const test = item % 2;
    if(wanted === 'odd' && test > 0) return item;
    if(wanted === 'even' && test === 0) return item;
  })

и ожидал, что это сработает, но он всегда возвращает [2, 4] и никогда [0, 2, 4], когда wanted является четным.

Будем весьма благодарны за любые мысли о том, почему это может иметь место.

1 Ответ

0 голосов
/ 29 сентября 2018

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

let arr = [ 1, 2, 3, 4, 0 ]
let wanted = 'even'
const result = arr.filter(item => {
    const test = item % 2;
    if(wanted === 'odd' && test > 0) return true;
    if(wanted === 'even' && test === 0) return true;
  })
console.log(result)

Вы можете упростить любое возвращение логических значений, созданных в ваших тестах:

let arr = [ 1, 2, 3, 4, 0 ]
let wanted = 'even'
const result = arr.filter(item => {
    if (wanted === 'odd') return item % 2
    if (wanted === 'even') return !(item % 2) 
  })
console.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...