Когда вызывается метод filter()
для массива в JavaScript, он ожидает функцию обратного вызова (callback), которая принимает три параметра: текущее значение элемента массива, индекс этого значения и сам массив. Когда вы используете этот метод с функцией обратного вызова, вы можете устанавливать различные условия для фильтрации элементов массива.
При использовании объекта в качестве параметра для filter()
и пытке обратиться к его свойству по ключу, в случае, если ключ отсутствует, вы получите undefined
. И если функция обратного вызова ожидает истинное (true) или ложное (false) значение, то значение undefined
будет интерпретировано как false
, поэтому элемент массива, для которого не удалось найти значение по ключу, не будет проходить фильтрацию.
Например:
const objectsArray = [ { name: 'Alice' }, { name: 'Bob' }, { age: 30 } ]; const filteredArray = objectsArray.filter(item => item.name); console.log(filteredArray); // [{ name: 'Alice' }, { name: 'Bob' }]
Когда вы используете строку в качестве параметра для filter()
, каждое значение будет рассматриваться как логическое, и пустая строка будет интерпретирована как false
, а любая непустая строка - как true
. Поэтому строка с ключом, которого нет в объекте, будет рассматриваться как true
, и элемент массива будет проходить фильтрацию.
Например:
const objectsArray = [ { name: 'Alice' }, { name: 'Bob' }, { age: 30 } ]; const filteredArray = objectsArray.filter('name'); console.log(filteredArray); // [{ name: 'Alice' }, { name: 'Bob' }, { age: 30 }]
Таким образом, различие в поведении при использовании объекта и строки в качестве параметра для filter()
заключается в том, как интерпретируются значения undefined
и пустая строка в данном контексте.