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

问题描述 投票:0回答:3

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

例如,具有键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},
    },
]
javascript arrays node.js javascript-objects
3个回答
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
投票

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

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;
  }
}
.as-console-wrapper { max-height: 100% !important; top: 0; }

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
© www.soinside.com 2019 - 2024. All rights reserved.