我有一个对象数组示例:
var myVar = new Array();
myVar.push({'abc':'123','def':'456'});
myVar.push({'ghi':'789','jkl':'012'});
我希望通过property / value找到给定对象的数组级别的indexOf。
alert(myVar.indexOf('ghi'));
似乎不是找到它的行动路线,我想我理解为什么,但弄清楚如何获取具有ghi
属性的对象数组的索引让我难倒,并为想法开放。
答案 0 :(得分:4)
var findIndex=function(key,arr) {
for(var i=0, j=arr.length; i<j; i++) {
if(arr[i].hasOwnProperty(key)) {
return i;
}
}
return -1;
};
var index=findIndex('ghi',myVar);
修改强>
Jan提出了一个重点:记住,即使0
评估为0
,因为它是一个有效的索引,但成功查找的整数不低于false
。 -1
表示找不到您的密钥。
答案 1 :(得分:2)
Array.prototype.findIndexOf = function(prop) {
var i = -1;
this.forEach(function(elem, index) {
if (prop in elem) {
i = index;
return false;
}
})
return i;
}
console.log(myVar.findIndexOf('property'));
答案 2 :(得分:1)
为它编写一个函数,如下所示:
function findIndex(arr, key) {
for (var i = 0, l = arr.length; i < l; i++) {
if (arr[i].hasOwnProperty(key)) {
return i;
}
}
return -1;
}
结果:
findIndex(myVar, 'ghi');
// 1
findIndex(myVar, 'def');
// 0
如果找不到任何内容,它将返回-1
:
findIndex(myVar, 'non');
// -1
答案 3 :(得分:0)
你必须迭代数组。 <{1}}不会以任何方式切割它。
.indexOf
http://jsfiddle.net/ExplosionPIlls/uaPVP/
可能会使用更好的方法,具体取决于您对索引的具体操作,但这至少应该给您一个想法。
答案 4 :(得分:0)
不是将对象存储在数组中,而是将它们放在父对象中,其中每个对象都是父对象的属性。这将允许您通过键尝试获取对象。
var myObject = {
abc: {'abc':'123','def':'456'},
ghi: {'ghi':'789','jkl':'012'}
}
现在,您可以通过键访问对象,而不是循环遍历数组中的每个项目:
var objectByKey = myObject['ghi']; // grab object by property name like this