2016-11-05 21 views
0

私はJavaScriptのオブジェクトの配列を持っています。内容は次のようになります。プロパティ値に基づくオブジェクトのJavaScriptフィルタ配列

obj_array = [{ 
     "DATA_ID": 1, 
     "DATA_NAME": "Dim", 
     "DATA_BB_TYP": 2, 
     "DATA_MAC": "5474", 
    }, 
    { 
     "DATA_ID": 3, 
     "DATA_NAME": "Spre", 
     "DATA_BB_TYP": 33, 
     "DATA_MAC": "8e30", 
    }, 
    { 
     "DATA_ID": 2, 
     "DATA_NAME": "Dimb", 
     "DATA_BB_TYP": 2, 
     "DATA_MAC": "45e8", 
    }, 
    { 
     "DATA_ID": 4, 
     "DATA_NAME": "Kht1", 
     "DATA_BB_TYP": 35, 
     "DATA_MAC": "58d0", 
    }, 
    { 
     "DATA_ID": 6, 
     "DATA_NAME": "Sens", 
     "DATA_BB_TYP": 34, 
     "DATA_MAC": "d004", 
    } 
] 

私はいくつかのオブジェクトを保持し、残りを削除します。オブジェクトプロパティDATA_BB_TYPが2または34の場合、オブジェクトは保持されます。他のオブジェクトは削除されます。 obj_arrayの結果は次のようになります。

obj_array_retained = 
[{ 
     "DATA_ID": 1, 
     "DATA_NAME": "Dim", 
     "DATA_BB_TYP": 2, 
     "DATA_MAC": "5474", 
    }, 
    { 
     "DATA_ID": 2, 
     "DATA_NAME": "Dimb", 
     "DATA_BB_TYP": 2, 
     "DATA_MAC": "45e8", 
    }, 
    { 
     "DATA_ID": 6, 
     "DATA_NAME": "Sens", 
     "DATA_BB_TYP": 34, 
     "DATA_MAC": "d004", 
    } 
] 

私はnode.js v6.91を使用しています。

EDIT:誰かがこの種の問題を解決するためにフィルタを使用して私に提案しました。フィルタ技術を使用した回答が最も歓迎されます。

答えて

3

あなたは、以下の方法1および2試すことができます。

方法1:(filterを使用して)

注:これは、新しい配列を返し、元の配列を変更することはありませんが。

var obj_array = [{ 
 
      "DATA_ID": 1, 
 
      "DATA_NAME": "Dim", 
 
      "DATA_BB_TYP": 2, 
 
      "DATA_MAC": "5474", 
 
     }, 
 
     { 
 
      "DATA_ID": 3, 
 
      "DATA_NAME": "Spre", 
 
      "DATA_BB_TYP": 33, 
 
      "DATA_MAC": "8e30", 
 
     }, 
 
     { 
 
      "DATA_ID": 2, 
 
      "DATA_NAME": "Dimb", 
 
      "DATA_BB_TYP": 2, 
 
      "DATA_MAC": "45e8", 
 
     }, 
 
     { 
 
      "DATA_ID": 4, 
 
      "DATA_NAME": "Kht1", 
 
      "DATA_BB_TYP": 35, 
 
      "DATA_MAC": "58d0", 
 
     }, 
 
     { 
 
      "DATA_ID": 6, 
 
      "DATA_NAME": "Sens", 
 
      "DATA_BB_TYP": 34, 
 
      "DATA_MAC": "d004", 
 
     } 
 
    ]; 
 

 
    var retained = [2, 34]; 
 

 
    var new_obj_array = obj_array.filter(function(obj) { 
 
     if(retained.indexOf(obj.DATA_BB_TYP) === -1) { 
 
     return false; 
 
     } 
 
     
 
     return true; 
 
    }); 
 

 
    console.log(new_obj_array);

方法2:(Basicバージョンあなたはfilterは、古いブラウザでサポートされませんので、ブラウザでこれを使用する場合)

var obj_array = [{ 
 
     "DATA_ID": 1, 
 
     "DATA_NAME": "Dim", 
 
     "DATA_BB_TYP": 2, 
 
     "DATA_MAC": "5474", 
 
    }, 
 
    { 
 
     "DATA_ID": 3, 
 
     "DATA_NAME": "Spre", 
 
     "DATA_BB_TYP": 33, 
 
     "DATA_MAC": "8e30", 
 
    }, 
 
    { 
 
     "DATA_ID": 2, 
 
     "DATA_NAME": "Dimb", 
 
     "DATA_BB_TYP": 2, 
 
     "DATA_MAC": "45e8", 
 
    }, 
 
    { 
 
     "DATA_ID": 4, 
 
     "DATA_NAME": "Kht1", 
 
     "DATA_BB_TYP": 35, 
 
     "DATA_MAC": "58d0", 
 
    }, 
 
    { 
 
     "DATA_ID": 6, 
 
     "DATA_NAME": "Sens", 
 
     "DATA_BB_TYP": 34, 
 
     "DATA_MAC": "d004", 
 
    } 
 
]; 
 

 
var retained = [2, 34]; 
 

 
for(var i = obj_array.length - 1; i >= 0; i--) { 
 
    var obj = obj_array[i]; 
 
    if(retained.indexOf(obj.DATA_BB_TYP) === -1) { 
 
    obj_array.splice(i, 1); 
 
    } 
 
} 
 

 
console.log(obj_array);

+0

ありがとう。それは完全に動作します。 Upvoted。誰かがフィルターを使って私に提案しました。この問題を解決するためにフィルターを使用する方法を知っていますか? – user781486

+1

もちろん、私はコードを更新します – Aruna

+1

私は 'filter'でコードを更新しました。どうぞご覧ください – Aruna

関連する問題