基于属性值的JavaScript过滤器对象数组 [英] JavaScript filter array of objects based on property values
问题描述
我在javascript中有一组对象.内容看起来像这样;
I have an array of objects in javascript. The contents look like this;
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
的结果将如下所示:
I want to retain some objects and remove the rest. If the object property DATA_BB_TYP
is 2 or 34, the objects will be retained. THe other objects are removed. The outcome of the obj_array
will look like this;
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.
I am using node.js v6.91.
有人建议我使用过滤器来解决此类问题.使用过滤技术的答案将是最受欢迎的.
Someone suggested to me using filter to solve this kind of problem. Answers using filter technique would be most welcomed.
推荐答案
您可以尝试以下方法1和2:
You can try the below methods 1 and 2:
方法1 :(使用filter
)
注意:这将返回一个新数组,并且不会修改原始数组.
Note: This will return a new array and won't modify the original array.
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
)
Method 2: (Basic version if you intend to use this in browser since filter
won't be supported by old browsers)
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);
这篇关于基于属性值的JavaScript过滤器对象数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!