【发布时间】:2018-12-05 19:22:35
【问题描述】:
我发现很多过滤器用于具有多个条件的对象数组,但它们似乎完全匹配。我需要一种过滤部分匹配的方法。我似乎找到了一个或另一个。
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 },
];
let filters = {
color: "Blue",
size: "70"
};
function multiFilter(array, filters) {
const filterKeys = Object.keys(filters);
return array.filter((item) => {
return filterKeys.every(key => !!~filters[key].indexOf(item[key]));
});
var filtered = multiFilter(products, filters);
(https://gist.github.com/jherax/f11d669ba286f21b7a2dcff69621eb72)
我正在使用此功能 - 效果很好!但比赛必须准确。如何将其更改为部分匹配?还有大写还是小写?我尝试了很多方法,但似乎无法正常工作。任何帮助将不胜感激!
【问题讨论】:
-
部分匹配的
filters对象会是什么样子?你会如何处理不是字符串的值,比如大小字段? -
部分会像
color: blu而不是color: Blue,键是完整的,而不是值。 -
“而且效果很好!” - 不,它没有。提供一个最小的工作示例/代码 sn-p 以及预期的结果。
-
你的过滤器不应该反过来吗?
item[key]将是超字符串,filters[key]将是子字符串... -
我想我是这样工作的
标签: javascript arrays node.js filter