【发布时间】:2019-11-04 20:00:38
【问题描述】:
这是我尝试获得多个属性的结果。但结果总是空数组。
有人在这里向我展示正确和最小的方法吗?我也没有不同的过滤条件..
nestedFilter = (targetArray, filters) => {
var filterKeys = Object.keys(filters);
return targetArray.filter(function (eachObj) {
return filterKeys.every(function (eachKey) {
return filters[eachKey].includes(eachObj[eachKey]);
});
});
};
//filter 1
let filter1 = {
color: "Blue",
size:'70'
};
//filter 2
let filter2 = {
name:'',
color: "Blue",
size:'70'
};
//filter 3
let filters = {
name:'',
color: "",
size:''
};
let products = [
{ name: "A", color: "Blue", size: 50 },
{ name: "B", color: "Blue", size: 60 },
{ name: "C", color: "Black", size: 70 },
{ name: "D", color: "Green", size: 50 },
];
var results = nestedFilter(products, filter2);
console.log(results); //getting alwasy empty.
【问题讨论】:
-
您没有任何名称为空的产品
-
@CodeManiac - 请检查我有多个过滤条件。
-
您在
filters[eachKey].includes(eachObj[eachKey])中搜索,这始终是错误的,因为您在过滤器中的键都没有值 -
在你的过滤器中你有
name: ''所以你没有一个产品的名字是""所以在这种情况下想要的结果是什么 -
@CodeManiac - 而不是
includes我尝试使用contains但仍然没有运气
标签: javascript arrays object ecmascript-6 ecmascript-2016