如果我有一组对象和一个 JavaScript 对象:
var data = [{"a": 1, "b": 2}, {"a": 1}, {"a": 1, "b": 2, "c": 3}];
var myFilter = {"a": 1, "b": 2};
Run Code Online (Sandbox Code Playgroud)
...并且希望使用myFilter对象作为对象数组的过滤器来创建新的对象数组,当且仅当该对象至少匹配或包含myFilter键/值对。
任何建议我如何继续并将其放入代码中?我需要创建一个data使用myFilter键/值对过滤的新数组。
我能够做到这一点,但myFilter只包含 1 个键/值对。
我预期的新数组是:
var newArr = [];
newArr = [{"a": 1, "b": 2}, {"a": 1, "b": 2, "c": 3}];
Run Code Online (Sandbox Code Playgroud)
您可以为此使用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))Run Code Online (Sandbox Code Playgroud)
一个更通用的方法是这个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
}
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
324 次 |
| 最近记录: |