在 JavaScript 中从一个对象搜索到另一个对象的键/值对
Searching key/value pair from one object to another in JavaScript
如果我有一个对象数组和一个 JavaScript 对象:
var data = [{"a": 1, "b": 2}, {"a": 1}, {"a": 1, "b": 2, "c": 3}];
var myFilter = {"a": 1, "b": 2};
。并希望使用myFilter
对象作为对象数组的过滤器,以创建新的对象数组,当且仅当对象至少匹配或包含myFilter
键/值对时。
任何建议如何继续将其放入代码中?我需要创建一个使用myFilter
键/值对从data
中过滤出来的新数组。
我能够做到这一点,但myFilter
只包含 1 个键/值对。
我预期的新数组是:
var newArr = [];
newArr = [{"a": 1, "b": 2}, {"a": 1, "b": 2, "c": 3}];
你可以使用 arr.filter(callback[, thisArg]( 来实现这一点:
var data = [{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 3 }]
var myFilter = { "a": 1, "b": 2 }
var myFilterFunction = function(obj) {
for (var p in myFilter) {
if (obj[p] !== myFilter[p]) return false
}
return true
}
var newArr = data.filter(myFilterFunction)
document.write(JSON.stringify(newArr))
更通用的方法是此filterFuncByObj(filterObj)
函数,它采用任何自定义过滤器对象:
data.filter(filterFuncByObj(myFilter))
:
var data = [{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 3 }]
var myFilter = { "a": 1, "b": 2 }
var newArr = data.filter(filterFuncByObj(myFilter))
// Demo Output
document.write(JSON.stringify(newArr))
function filterFuncByObj(filterObj) {
return function(obj) {
for (var p in filterObj) {
if (obj[p] !== filterObj[p]) return false
}
return true
}
}
使用 Array.filter()
, Object.keys()
并Array.every()
这可能是一种方法
var data = [{"a": 1, "b": 2}, {"a": 1}, {"a": 1, "b": 2, "c": 3}];
var myFilter = {"a": 1, "b": 2};
var filteredData = data.filter(function(d) {
return Object.keys(myFilter).every(function(f) {
return d[f] === myFilter[f];
})
});
console.log(JSON.stringify(filteredData));
lodash 方式,以防万一:
var data = [{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 3 }];
var myFilter = { "a": 1, "b": 2 };
var newArr = _.filter(data, myFilter);
document.write(JSON.stringify(newArr, null, 3));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>
相关文章:
- 对对象数组重新排序,以便数组的每个位置都有一个特定的键/值对
- 按一个对象的值对对象数组进行排序
- 如何在另一个键/值对中使用定义的键
- 检查另一个对象中是否存在键/值对
- 在jquery中,json对象How中的每个循环(使循环从对象中找到一个值,并与另一个对象值进行比较,以避免重复打印)
- 在 JavaScript 中从一个对象搜索到另一个对象的键/值对
- 为什么要在对象文字中的键值对后面留一个逗号呢
- 从一个对象中获取一个名称值对,并将其添加到另一个对象
- jquery绑定一个键值对
- 对象数组:对于数组1中的每个元素,是否存在一个对象值作为数组2中任何对象的值
- 如何获得键值对对象中的最后一个键
- 我如何分割两个字符串,并使一个键值对在javascript
- 检查Javascript对象是否包含与另一个对象相同的键/值对
- 显示数组中的下一个对象值
- 我如何删除一个键值对使用摇篮在CouchDB/Node.js
- 从一个javascript对象中打印5个随机键/值对
- 使用纯JavaScript,给定一个对象集合和一个过滤器对象,返回集合中与过滤器对象具有相同键/值对的对象
- 为什么我不能分配一个对象值给一个特定的变量在Nightwatch.js
- 如何将JS对象文字名称-值对传递给另一个函数
- js -如何检查一个对象是否对相机可见