Member 14074655 Ответов: 2

Как найти в массиве объектов объект, который не имеет свойства "x"?


Скажем, у меня есть массив объектов:
[{имя:"Крис", возраст:14 лет, loc:"kw"},{имя:"Эрик", loc:"kw"}]
Как найти объект без свойства age, то есть объекты[1]

Что я уже пробовал:

объекты.найти(функция(Эль){возвращение элемента.возраст===неопределено})

2 Ответов

Рейтинг:
9

Richard Deeming

Я был бы склонен использовать Объект.прототип.метод hasOwnProperty[^] чтобы определить, было ли определено свойство:

var value = objects.find(function(el){ return !el.hasOwnProperty("age"); });

NB: Массив.прототип.найти[^] найдет первый элемент, который соответствует. Если вы хотите найти все совпадающие элементы, используйте Массив.прототип.фильтр[^] вместо.
var allValues = objects.filter(function(el){ return !el.hasOwnProperty("age"); });

Обратите внимание, что обе функции имеют ограниченную поддержку в старых браузерах. Есть полифилл в наличии.

Если вы поддерживаете только новые браузеры - в частности нет Internet Explorer - вы также можете рассмотреть возможность использования Функции стрелок[^] для упрощения кода:
var value = objects.find(el => !el.hasOwnProperty("age"));
var allValues = objects.filter(el => !el.hasOwnProperty("age"));


Рейтинг:
0

Thomas Daniels

Ваша строка кода будет почти работать, но внутри функции, которую вы используете element.age но element не существует; вы вызвали свой параметр el. Пробовать el.age вместо.