2016-11-05 223 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。

編輯:有人建議我使用過濾器來解決這類問題。使用過濾技術的答案將是最受歡迎的。

回答

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:(基本版,如果你打算在瀏覽器中使用,因爲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