Вы ищете метод some
:
return superhero.group &&
superhero.group.items &&
superhero.group.items.some(({id}) => id === "1517");
или, если вам это нужно в ES5:
return superhero.group &&
superhero.group.items &&
superhero.group.items.some(function(item) {
return item.id === "1517";
});
some
вызовыего обратный вызов один раз для каждой записи в массиве и либо возвращает true
в первый раз, когда обратный вызов возвращает значение truey¹, либо возвращает false
, если обратный вызов никогда не возвращает истинное значение (в том числе, если в массиве вообще не было записей)). Таким образом, он проверяет, соответствует ли «некоторый» (действительно, «любой») элемент в массиве предикату, выраженному обратным вызовом.
Вот пример (в ES2015 +) для обоих случаев, когда условие истинно, и когдаэто ложь:
function check(superhero) {
return superhero.group &&
superhero.group.items &&
superhero.group.items.some(({id}) => id === "1517");
}
function test(superhero, expect) {
const result = check(superhero);
console.log(`Checking ${JSON.stringify(superhero)}: ${result} <= ${!result === !expect ? "OK" : "ERROR"}`);
}
test({group: {items: [{id: "1"}, {id: "1517"}, {id: "9999"}]}}, true);
test({group: {items: [{id: "1"}, {id: "2"}, {id: "3"}]}}, false);
¹ «истинное значение» - «истинное» значение - это любое значение, которое не является «ложным». Значение falsy - это значение, которое оценивается как false
при использовании в качестве условия (например, if (x)
). Ложные значения: 0
, ""
, null
, undefined
, NaN
и, конечно, false
.