2

私はオブジェクトの例の配列を持っています:

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

プロパティ/値によって、特定のオブジェクトの配列レベルのindexOfを見つけたいと思います。

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

それを見つけるためのアクションのルートではないようです。その理由は理解していると思いますが、のプロパティをghi持つオブジェクトの配列のインデックスを取得する方法を理解することは、私を困惑させ、アイデアのために開いています。

4

5 に答える 5

2

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
于 2013-05-21T02:39:17.093 に答える
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/

于 2013-05-21T02:44:39.787 に答える
0

配列を反復処理する必要があります。 .indexOfどのようにスライスしても機能しません。

myVar.forEach(function (elem, idx) {
    if (elem.hasOwnProperty('ghi')) {
        console.log(idx);
    }
});

http://jsfiddle.net/ExplosionPIlls/uaPVP/

インデックスで具体的に何をしたいかによっては、おそらくより良い方法を使用できますが、これで少なくともアイデアが得られるはずです。

于 2013-05-21T02:39:07.310 に答える
0

オブジェクトを配列に格納する代わりに、各オブジェクトが親オブジェクトのプロパティである親オブジェクトに配置できます。これにより、しようとしているようにキーでオブジェクトを取得できます。

var myObject = {
    abc: {'abc':'123','def':'456'},
    ghi: {'ghi':'789','jkl':'012'}
}

配列内の各項目をループする代わりに、キーでオブジェクトにアクセスできるようになりました。

var objectByKey = myObject['ghi']; // grab object by property name like this
于 2013-05-21T02:40:10.520 に答える