使用所需键值的列表筛选对象数组
Filter array of objects using a list of desired key values
我有一个对象数组,可能看起来像这样:
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中有没有一种干净的方法可以做到这一点?
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;
});
考虑使用underscore.js库。它包含一个拒绝方法,应该做技巧
拒绝
_.reject(list, predicate, [context])
返回列表中的值,不包含真值测试(谓词)通过的元素。与过滤器相反。
var odds = _.reject([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [1, 3, 5]
这就是您想要的吗?
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];
}
}
相关文章:
- 使用下拉列表筛选列表(ul>li)
- 需要Jquery列表筛选帮助
- React中的筛选列表
- 在本地存储中选中复选框,但在加载时也要筛选列表
- 根据文本框中键入的文本筛选单选按钮列表
- 使用 JQuery 复选框筛选项目列表
- 无法使用Angular.js从列表中正确筛选数据
- 控制器中的筛选列表没有'不起作用
- 我们可以将控制器中的JSON数据(MM/DD/YYYY格式)与今天的's日期,并在数组中显示筛选列表
- 如何使用搜索筛选器初始化列表视图
- 如何根据其他下拉列表中的选择筛选下拉结果
- 在文本框中键入字母的筛选器单选按钮列表
- 如何从交叉筛选器实例中获取维度列表
- 使用日期将所有下拉列表筛选为下拉列表
- 使用日期将下拉列表筛选为下拉列表
- 将特殊字符折叠添加到列表筛选器
- 使用所需键值的列表筛选对象数组
- 基于第一选择列表筛选第二选择列表
- 用这种方式创建列表筛选器方法不好吗?
- JQuery列表筛选器无法使用错误的字符