1

次のような json オブジェクトが提供されているとします。

{"someList": [{"id": "21154859" },{"id": "21154865" },{"id": "21154856" },{"id": "21154870" }]}

現在の「someList」アイテムのインデックス番号を知りたいです。someList アイテム ID があり、それは var aid と equals : 21154856 で表されます。

次のような関数を作成しました。

$.getJSON( url, function( data ) {
var jsonLength = data.someList.length;
for ( i=1; i <= jsonLength; i++ ){
        chx = data.someList[i].id;
        if(chx === aid){
            var currentidno = Number(i) + 1;
            $('#page').html('').append(currentidno + ' of ' + jsonLength);
            break;
        }
        }
});

これを設定すると問題なく動作し、次のような結果が得られます: 3 of 4

しかし、それは効率が悪いように感じます。何千もの可能性があるとしたら、どのように機能するのだろうか. これが私がやりたいことを達成するための最良の方法であるかどうかを誰かが検討し、これがタスクを達成するための良い方法であるという仮定を検証または否定できますか?

4

2 に答える 2

0

いいえ、ループはただの方法です。ただし、多くの要素に対して頻繁にその検索を行う必要がある場合は、インデックスを作成するのが効率的かもしれません (または、他のプロパティがない場合は、JSON を数値の配列として一度に配信するだけです)。

var indexArray = data.someList.map(function(o){return o.id;});
var currentidno = indexArray.indexOf(aid) + 1;

または、配列の代わりに、オブジェクト プロパティによるインデックス付けを行うこともできます。

someValues = {"21154859":{index:0},"21154865":{index:1},"21154856":{index:2},"21154870":{index:3},... }; 
// no order needed!
var currentidno = someValues[aid].index + 1;
于 2012-05-30T22:46:47.223 に答える