我有一个可能如下所示的对象数组:
var arr = [{
a: 1,
b: 321,
c: 556,
d: 8
}, {
a: 1,
b: 22,
c: 21,
d: 8
}, {
a: 1,
b: 1,
c: 43,
d: 8
}, ];
和另一个可能的列表:
var list = ['a', 'c', 'd'];
由于我的列表只有键a,c和d,我想摆脱原始数组上b
键的所有实例。所有这些程序都必须是动态的,因为在接收它们之前我无法知道这些键可能是什么。
在JavaScript中有这么好的方法吗?
答案 0 :(得分:1)
考虑使用underscore.js库。它包含一个reject方法,可以解决这个问题
拒绝
_.reject(list, predicate, [context])
返回列表中的值,而不返回真值测试(谓词)传递的元素。与过滤器相反。
var odds = _.reject([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [1, 3, 5]
答案 1 :(得分:1)
arr.forEach(function(element)
{
for(var key in element)
{
if(list.indexOf(key) === -1)
{
delete element[key];
}
}
});
应该是不言自明的。
如果您不想修改原始数组:
arr.map(function(element)
{
element = JSON.parse(JSON.stringify(element));
for(var key in element)
{
if(list.indexOf(key) === -1)
{
delete element[key];
}
}
return element;
});
答案 2 :(得分:0)
这就是你要找的东西吗?
for(var i=0, i < arr.length; i++) {
if(arr[i].b) delete arr[i].b
}
//更新,一种香草的方法
var reject = [ "b" ];
for(var i=0, i < arr.length; i++) {
for(var j in arr[i]) {
if(reject.indexOf(j) != -1) delete arr[i][j];
}
}