属性

2011-09-17 15 views
5

によるJSONオブジェクトは、私は、このJSONオブジェクトがあるとしなさい:属性

var images = {"success":"true", "images":[ 
    {"id":"1234","url":"asdf","tags":["cookie","chocolate"]}, 
    {"id":"5678","url":"qwer","tags":["pie","pumpkin"]} 
]}; 

5678のIDを持つ画像のURLを取得するための最も効率的な方法だろうか? jQueryを使用できます。

+0

あなたはどのように多くを持っていますか?それが(500未満のような)ほんの少しの場合、どのアプローチをとるかは関係ありません。 – tjameson

+0

おそらく数百になるかもしれませんが、場合によっては最大1,000まであります。 – penguinrob

+0

これらのアプローチのいずれかを私に見せてもらえますか?それがどれほど効率的であるかは問題ではありません。私は仕事を終わらせるものが必要です。 – penguinrob

答えて

12

これは配列なので、単純な配列値だけではなく、埋め込みプロパティを探しているので、実際にそれを見つけるのに効率的な方法はありません。配列を歩き回って、各IDをあなたが探しているものと比較するという無条件の仕組みがあります。

この同じデータ構造でこれらの種類のものを複数回検索して高速化したい場合は、既存のデータ構造をより効率的な別のデータ構造に変換できますIDによって、次のように:次に

var imagesById = { 
    "1234": {"url":"asdf","tags":["cookie","chocolate"]}, 
    "5678": {"url":"qwer","tags":["pie","pumpkin"]} 
} 

、idでオブジェクトを見つけることが、このように簡単です:

imagesById["1234"] 
+0

ああ、別のデータ構造に入れるための+1。さらなるアクセスをスピードアップするためにJSONを初めて取得したら、これを行うだけです。 – penguinrob

2

IDがソートされていない限り、あなたは昔ながらの反復より良いを行うことはできません。

var images = {"success":"true", "images":[ 
    {"id":"1234","url":"asdf","tags":["cookie","chocolate"]}, 
    {"id":"5678","url":"qwer","tags":["pie","pumpkin"]} 
]}; 

var inner = images.images, 
    targetId = '5678', 
    found = null; 

for (var i=0; i<inner.length; i++) { 
    if (inner[i][id] === targetId) { 
     found = inner[i]; 
     // do stuff... 
     break; 
    } 
} 
あなたは配列をループする必要があるだろう
2

$.each(images.images,function(i,img) { 
    if(img.url == "5678") { 
     //do whatever you want with this url 
    } 
} 
5
url = $.grep(images.images, function(item) { return item.id === '5678' })[0].url; 
+0

jQueryでgrep関数について聞いたことがありません! +1! – penguinrob