javascript indexOf多维对象数组

时间:2013-05-21 02:32:49

标签: javascript jquery arrays

我有一个对象数组示例:

var myVar = new Array();
    myVar.push({'abc':'123','def':'456'});
    myVar.push({'ghi':'789','jkl':'012'});

我希望通过property / value找到给定对象的数组级别的indexOf。

alert(myVar.indexOf('ghi'));

似乎不是找到它的行动路线,我想我理解为什么,但弄清楚如何获取具有ghi属性的对象数组的索引让我难倒,并为想法开放。

5 个答案:

答案 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'));

http://jsfiddle.net/ZUHPF/

答案 2 :(得分:1)

Working FIDDLE Demo

为它编写一个函数,如下所示:

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