2016-05-06 11 views
0

jQueryを使用して、Idという値を持つallObjects配列内のオブジェクトを見つけるには、IDの配列を使用したいと思います。オブジェクトの配列とidの配列を比較する

var arrayOfIds = [1, 4, 5]; 

var allObjects = [{"Id":"1", "name":"aa"},{"Id":"2", "name":"bb"} ,{"Id":"3", "name":"cc"} ,{"Id":"4", "name":"dd"}, {"Id":"5", "name":"ee"}, {"Id":"6", "name":"ff"}, {"Id":"7", "name":"gg"}, {"Id":"8", "name":"hh"}, {"Id":"9", "name":"ii"}]; 

結果が等しくなる:

[{"Id":"1", "name":"aa"}, {"Id":"4", "name":"dd"}, {"Id":"5", "name":"ee"}] 

をこれまでのところ、私は個々のオブジェクトを抽出するために、以下を使用することができます。

var result = $.grep(arrayOfIds, function(e) { return e.Id == 3; }); 

答えが達成されるかもしれないかのように私は感じます上記の$ .grepクエリを何らかの形で修正することで、それを把握することはできません。

答えて

3

このためにjQueryは必要ありません。

allObjects.filter(x=> arrayOfIds.includes(Number(x.Id))) 

参照demo on JS Bin:オブジェクトIdプロパティがarrayOfIdsであるかどうかをチェックするためにallObjectsArray.prototype.includes()をフィルタリングするArray.prototype.filter()を使用することができます。

+0

MDNによると、IEでは、includesがまだサポートされていません。 – Taplar

+0

@Taplarそれのためのpolyfillがあります。 –

+0

あなたはあなたの答えにそれを含めませんでした。 – Taplar

0

ベストは、あなたがオブジェクト自体に配列を変換である:

function atoo(a) 
{ 
    var i, obj; 

    obj = {}; 

    for (i = 0; i < a.length; i++) 
    { 
    obj[a[i].Id] = a[i]; 
    } 

    return obj; 
} 

あなたは今、単に指標としてそれらを扱うことにより、オブジェクトを介して、アレイ内のすべてのアイテムにアクセスすることができます

obj["4"] 

リターンを配列にも格納されている正しいオブジェクトa[3]

これらの問題のすべての種類の一般的な解決策であるため、機能とみなされるjQueryはありません。

フィルタを使用すると()、書き込みが簡単になりますが、アイテムに頻繁にアクセスするときや配列が非常に大きいときにパフォーマンス上の問題が発生します。上記の解決策は、あなたが望むほど速いオブジェクト参照の内部実装に依存しています。

0

filter()のような方法を使用できます。

var arrayOfIds = [1, 4, 5]; 
var allObjects = [{ "Id": "1", "name": "aa" }, { "Id": "2", "name": "bb" }, { "Id": "3", "name": "cc" }, { "Id": "4", "name": "dd" }, { "Id": "5", "name": "ee" }, { "Id": "6", "name": "ff" }, { "Id": "7", "name": "gg" }, { "Id": "8", "name": "hh" }, { "Id": "9", "name": "ii" }]; 
var result = $(allObjects).filter(function() { return arrayOfIds.indexOf(+this.Id) > -1 }).get(); 
+0

文字列を数値に変換するために '+'演算子を使用しないでください。コードが読めなくなります。また、なぜ '.includes()'メソッドがあるときに '.indexOf()'を使用していますか? –

+0

+を使わないほうがいいですが、 'indexOf()'では何の問題もありません。 @ゴート – Azim

関連する問題