JS-按属性值的数组过滤对象数组,并返回已过滤对象的数组 [英] JS - filter array of objects by array of property values and return array of filtered objects
本文介绍了JS-按属性值的数组过滤对象数组,并返回已过滤对象的数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试(在js或jQuery中)筛选对象数组并返回具有特定属性名称的对象数组。
我尝试了filter
和find
函数,如下所示:
var objs = [{ a:1, }, {a:2}, {a:3}, {a:4}]
var vals = [1, 2]
function callback(obj) {
var arr = arr || []
console.log(arr)
$.each(vals, function(key, val) {
if ( val == obj.a ) {
arr.push(obj)
}
})
}
var result = objs.find(callback);
console.log(">>>", result)
预期结果为:
result = [{a:1}, {a:2}]
但是,它不起作用,因为find
的每个迭代都会重新开始,并重新定义arr
。
$.each()
进行迭代-一个用于迭代对象数组,另一个用于迭代属性值数组,但我认为这是最后的选择--寻找更优雅、更简短的对象。你们有什么主意吗?
推荐答案
Thijs的答案有效,但随着vals
数组变大,它的性能将变得不佳。要获得O(N)复杂性,您可以从allowedValues
数组中构建一个集合:
var objs = [{ a:1, }, {a:2}, {a:3}, {a:4}]
var vals = [1, 2]
function filterByValue(source, allowedValues) {
allowedValues = new Set(allowedValues)
// Return the result of the filter.
return source.filter(item => {
// Returns true when `a` is present in vals, otherwise it returns false.
return allowedValues.has(item.a);
});
}
const filteredArray = filterByValue(objs, vals);
console.log(filteredArray)
这篇关于JS-按属性值的数组过滤对象数组,并返回已过滤对象的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文