[英]javascript filter and include method usage in nested array object
[英]Usage of array filter in nested json object
我的目標是引用嵌套json structure
的特定視圖(A,B或C)。
this.selected_table = this.all_tables.views.find(x => x)['A'];
這是使用過濾器的正確方法,因為我發現的所有示例在array.find()
內部都有一些條件。 在我的情況下,它可以在沒有條件的情況下工作,但是我覺得在我的情況下, array.find()
是不必要的嗎? 但是,我找不到其他方法。
JSON對象
all_tables = {
"views":[
{
"A":[
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
},
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
}
],
"B":[
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
},
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
}
],
"C":[
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
},
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
}
]
}
]
}
通常, Array.prototype.find
用於根據內部函數是否返回true來查找數組中的特定元素。 在您的示例中,您返回的x
是views
數組中的對象,因此它的值為true
。 所以,你的.find
簡直只是在你返回一個對象views
陣列(或者更具體地說是在你的第一個對象views
陣列)。 既然是這種情況,就不需要.find()
,而只需使用其索引在views
引用該對象即可:
this.selected_table = this.all_tables.views[0]['A']
請參見下面的示例:
all_tables = { "views":[ { "A":[ { "id":"a", "username":"", "status":"", "location":"", "positionen":[ { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" } ] }, { "id":"a2", "username":"", "status":"", "location":"", "positionen":[ { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" } ] } ], "B":[ { "id":"b", "username":"", "status":"", "location":"", "positionen":[ { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" } ] }, { "id":"b2", "username":"", "status":"", "location":"", "positionen":[ { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" } ] } ], "C":[ { "id":"c", "username":"", "status":"", "location":"", "positionen":[ { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" } ] }, { "id":"c2", "username":"", "status":"", "location":"", "positionen":[ { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" } ] } ] } ] }; console.log(all_tables.views[0]['A']); console.log(all_tables.views[0]['C']);
.find(x => x)
將返回數組中的第一項為真,否則為false,0,'',未定義或null。
不確定我是否完全遵循您的問題,但是您是否要查找包含A屬性的視圖,然后返回該屬性?
const getProp = (views, prop) => {
const view = views.find(v => v[prop]);
//Will return the first view that has a property called prop
return view && view[prop]; // If it found one return the property
};
那你可以用
const prop = getProp(views, 'A');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.