簡體   English   中英

獲取嵌套對象數組中父對象的索引

[英]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'應該給我0id = '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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM