使用随机键在对象数组中查找索引

时间:2018-03-06 02:40:15

标签: javascript arrays node.js javascript-objects

如果我有一个带有随机密钥的嵌套对象数组,如何找到知道随机密钥的对象的索引?

例如关键字Jas9d8d的对象索引? (答案是0)

const myArray = [
    Jas9d8d:{
        151231230123:{
           key1:value
           key2:value
           key3:value},
    },

    gkdkaksd9d:{
        151231230123:{
           key1:value
           key2:value
           key3:value},
    },

    hdhfe89hef:{
        151231230123:{
           key1:value
           key2:value
           key3:value},
    },
]

3 个答案:

答案 0 :(得分:2)

您也可以使用find()

const myArray = [{    Jas9d8d: {      '151231230123': {        key1: 'value',        key2: 'value',        key3: 'value'      }    }  },  {    gkdkaksd9d: {      '151231230123': {        key1: 'value',        key2: 'value',        key3: 'value'      }    }  },  {    hdhfe89hef: {      '151231230123': {        key1: 'value',        key2: 'value',        key3: 'value'      }    }  }];

const myObj = myArray.find(x => x.hasOwnProperty("Jas9d8d")) || 0;
// Returns the object that satisfies the test base on the key provided. If not, returns 0.
var myObjIndex = myArray.indexOf(myObj);

请注意,IE中不支持Array.find()。

答案 1 :(得分:1)

假设该数组的结构有效且每个对象只有一个键值:



const myArray = [{    Jas9d8d: {      '151231230123': {        key1: 'value',        key2: 'value',        key3: 'value'      }    }  },  {    gkdkaksd9d: {      '151231230123': {        key1: 'value',        key2: 'value',        key3: 'value'      }    }  },  {    hdhfe89hef: {      '151231230123': {        key1: 'value',        key2: 'value',        key3: 'value'      }    }  }];

for (var i = 0; i < myArray.length; i++) {
  if (Object.keys(myArray[i]).pop() === 'Jas9d8d') {
    console.log(`Found at index ${i}`);
    break;
  }
}
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 2 :(得分:0)

findIndex完全是为了这个:

var i = myArray.findIndex(x => x.hasOwnProperty("Jas9d8d")); // 0

如果引擎不支持findIndex,则无处不在:

var i = myArray.length-1;
for (; i >= 0; --i)
    if (myArray[i].hasOwnProperty("Jas9d8d"))
        break;
console.log(i); // 0