[英]Get index of parent object in nested object array
我有這個數組:
[
{
elements: [
{ id: '123', field: 'value' }
{ id: '456', field: 'value' }
]
}
{
elements: [
{ id: '789', field: 'value' }
]
}
]
現在我需要通過id獲取第一級對象的索引:搜索id = '456'
應該給我0
, id = '789'
應該給我1
你可以用findIndex()
和some()
來做到這一點
var arr = [{ elements: [{ id: '123', field: 'value' }, { id: '456', field: 'value' }] }, { elements: [{ id: '789', field: 'value' }] }] var i = arr.findIndex(function(o) { return o.elements.some(function(e) { return e.id == 456; }) }) console.log(i)
感覺可以修復一些東西來重新考慮這一點。 但誰知道呢。 456應該給你1 id,789也應如此。
var mapped = whatEverObject[0].elements.map(function(obj){ //0 = first
return obj.id;
})
console.log(mapped.indexOf(456)) // will give you 1 since id:123 is id 0 in the first elements array.
您可以創建查找表。 如果進行多次查找,速度會快得多。
var table = makeNestedLookupTable(example);
// table[789] would be 1 if the array in the question were "example"
function makeNestedLookupTable(data) {
return data.reduce(function(lookup, obj, topIndex) {
return obj.elements.reduce(function(lookup, element) {
lookup[element.id] = topIndex;
return lookup;
}, lookup);
}, {});
}
您可以使用此函數getIndex
循環遍歷數組並將元素的id與給定的id匹配並返回索引。此解決方案適用於所有瀏覽器。
var arr = [
{
elements: [
{ id: '123', field: 'value' }
{ id: '456', field: 'value' }
]
}
{
elements: [
{ id: '789', field: 'value' }
]
}
];
function getIndex(arr, id) {
var i, ii, len, elemlen;
for (i = 0, len = arr.length; i < len; i++) {
elements = arr[i].elements;
for (ii = 0, elemlen = elements.length; ii < elemlen; ii++) {
if (elements[ii].id === id) {
return i;
}
}
}
}
var index = getIndex(arr, '456');
這是一個通用代碼,您可以在其中發送數組和lookup屬性:
function giveLevel(a,attr){
for(var i=0;i<a.length;i++){
var o = a[i];
var tmp = JSON.stringify(o);
if(tmp.indexOf(attr)!==-1){
return i;
}
}
}
var a = [{elements: [
{ id: '123', field: 'value' },
{ id: '456', field: 'value' }
]
},
{
elements: [
{ id: '789', field: 'value' }
]
}
];
giveLevel(a,'"id":"789"'); // returns 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.