Булевы фильтры

1

Я пытаюсь написать функцию, которая избавляется от элементов на основе параметра для поиска. Я не уверен, почему это происходит при использовании булевых выражений:

function getRid(array, discardThis) {
  if (array.length === 0) {
    return []
  }
  let newArr = array.filter( function (element) {
    if (element != discardThis) {
      return element;
    }
  })
  return (newArr.length === array.length) ? [] : newArr;
}

getRid([true, true, true, false, true], true);
Теги:
boolean
boolean-expression

2 ответа

2
Лучший ответ

Функция filter должна возвращать логическое значение, проверяя, что каждый элемент возвращает true если он должен быть сохранен и false если это не так. Пытаться:

function getRid(array, discardThis) {
  if (array.length === 0) {
    return []
  }
  let newArr = array.filter( function (element) {
      return element != discardThis
    }
  )
  // I'm not clear on this check so I left it, 
  // but it would make more sense to simply return newArr
  return (newArr.length === array.length) ? [] : newArr
}
1

Все, что вам действительно нужно от вашего кода, следующее.

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

примечание: лучшее имя будет exclude

function getRid(array, discardThis) {
  return array.filter(function (element) {
    return element != discardThis
  })
}

console.log(
  getRid([true, true, true, false, true], true)
)
<script src="https://codepen.io/synthet1c/pen/KyQQmL.js"></script>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню