[英]Filter a Javascript array to check specific value in all nested objects
我正在嘗試過濾數組以檢查所有嵌套對象的特定值(我有包含其他項目的項目)是否符合我的條件。
以下工作正常,但我需要迭代該過程,直到找到所有匹配的元素。
// My filter
var itemsNumber = e.items.filter(function(superhero) {
return superhero.group && superhero.group.items && superhero.group.items[0] && superhero.group.items[0].id === "1517"
/* I basically need to iterate the following process:
|| superhero.group && superhero.group.items && superhero.group.items[1] && superhero.group.items[1].id === "1517"
|| superhero.group && superhero.group.items && superhero.group.items[2] && superhero.group.items[2].id === "1517"
|| superhero.group && superhero.group.items && superhero.group.items[3] && superhero.group.items[3].id === "1517"
|| superhero.group && superhero.group.items && superhero.group.items[4] && superhero.group.items[4].id === "1517"
... And so on.
*/
});
console.log(itemsNumber.length);
提前致謝。
您正在尋找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
值時返回false
,或者如果回調從未返回真實值(包括如果數組中根本沒有條目)則返回 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);
¹ “真實值” - “真實”值是任何非“虛假”的值。 假值是在用作條件時評估為false
的值(例如if (x)
)。 虛假值為0
、 ""
、 null
、 undefined
、 NaN
,當然還有false
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.