2010-12-12 21 views
1

javascript配列を数値に基づいてソートする方法はたくさんあります。しかし、の値を持つprop1というプロパティを持つmyArrayからすべての要素を取得するには、どのような方法が適していますか?ここでJavascript:2次元配列をフィルタリングする

は私の配列です:

var myArray = [ 
{ 
    "id":"2", 
    "name":"My name", 
    "properties":{"prop1":"value1"} 
}]; 

おかげ

答えて

2

あなたはドットでそれにアクセスすることができますかブラケットの表記法と一致するメンバーをあなたのn EW /例えば、配列をフィルタリング:あなたがちょうどnewArray.push(myArray[i].properties)newArray.push(myArray[i])を変更、{"prop1":"value1"}オブジェクトではなく、親を取得しようとしている場合

var newArray = []; 
for(var i=0, l = myArray.length; i<l; i++) { 
    if(myArray[i].properties.prop1 == "value1") newArray.push(myArray[i]); 
} 

あなたの質問は、しかし少しあいまいです。

+0

本当にきれいな解決策です。どうもありがとう! – Industrial

+0

こんにちはニック - ここを見てください。 http://stackoverflow.com/questions/4433004/jquery-js-sorting-array-based-upon-another-array – Industrial

1

は、任意のプロパティによってソートする比較関数を提供します

function compareMyObjects(a, b) { 
    var valA = a.properties.prop1.value1; 
    var valB = b.properties.prop1.value1; 

    if(valA > valB) return 1; 
    if(valA < valB) return -1; 
    return 0; 
} 

myArray.sort(compareMyObjects); 

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

+0

この*種類*配列はフィルタリングしません。また、 'prop1'は文字列なので、ソートにはあまりにも多くのプロパティがあります。 –

0

アレイ内の各要素を調べます。各要素について、それぞれのプロパティを調べて、探しているプロパティと一致するかどうかを確認します。

function filterArray(array, property, value) { 
    var newArray = []; 
    for (var i = 0; i < array.length; i++) { 
     for (var j in array[i].properties) { 
      if (j === property && array[i].properties.hasOwnProperty(j)) { 
       if (array[i].properties[j] == value) { 
        newArray.push(array[i]); 
       } 
      } 
     } 
    } 
} 
+0

これは値をどこでもチェックしません。新しいオブジェクトを新しい配列に複数回プッシュするだけです1つ以上の子プロパティがある場合でも。 –

+0

修正しました。私は転記直後に自分の間違いを認識した。 – mdarwi

+0

なぜあなたはプロパティに直接アクセスすることができますか? :) –

0
var newarray=myarray.filter(function(itm){ 
    return itm.properties.prop1==='value1'; 
}); 

フィルターは、配列のメソッドのindexOfとマップのように、このバージョンは、Mozillaの開発者からであるIT-を持たないブラウザのために提供する価値があるかもしれサイト -

if(!Array.prototype.filter){ 
    Array.prototype.filter= function(fun, scope){ 
     var L= this.length, A= [], i= 0, val; 
     if(typeof fun== 'function'){ 
      while(i< L){ 
       if(i in this){ 
        val= this[i]; 
        if(fun.call(scope, val, i, this)){ 
         A[A.length]= val; 
        } 
       } 
       ++i; 
      } 
     } 
     return A; 
    } 
}