获取嵌套对象数组中父对象的索引

时间:2016-09-27 09:25:54

标签: javascript arrays

我有这个数组:

[
    { 
        elements: [
            { id: '123', field: 'value' }
            { id: '456', field: 'value' }
        ]
    }
    { 
        elements: [
            { id: '789', field: 'value' }
        ]
    }
]

现在我需要通过id获取第一级对象的索引: 搜索id = '456'应该给我0id = '789'应该给我1

5 个答案:

答案 0 :(得分:3)

您可以使用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)

答案 1 :(得分:0)

感觉可以修复某些东西以重新考虑这一点。但谁知道呢。 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.

答案 2 :(得分:0)

您可以创建查找表。如果你进行多次查找,它会快得多。

Live Example

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);
    }, {});
}

答案 3 :(得分:0)

您可以使用此函数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'); 循环数组并将元素的id与给定的id匹配并返回索引。此解决方案适用于所有浏览器。

for(var i = n1; n3>0 && i<=n2 || n3<0 && i>=n2; i += n3){
      nArr.push(i);
}

答案 4 :(得分:0)

这是一个通用代码,您可以在其中发送数组和查找属性:

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