我有一组对象,它们根据选定的对象有一些可过滤的信息。
我有以下内容,并希望迭代selected
中的键,只返回满足所有条件的项(在这种情况下,用户Amber
的{{1}}为12 AND tagId
27)。
有一点需要注意,如果placementId
过滤器等于null,则应将其从过滤中排除,因为这意味着用户不会过滤该过滤器。
这将变得像8个过滤器一样,所以不要做一些大的if语句。我怎么能这样做?
selected
答案 0 :(得分:1)
您可以使用Array#filter
和Object.entries
(或填充它),如下所示:
var selected = {tagId: 12,placementId: 27};
var users = [
{"name":"Joe", "tagIds":[3,4,12], "placementIds": [2,19]},
{"name":"Suzy", "tagIds":[3,4], "placementIds": [2,19, 27]},
{"name":"Amber", "tagIds":[1,12], "placementIds": [2,19, 27]}
];
function filterBySelected(items){
return items.filter(item =>
Object.entries(selected).every(([k, v]) =>
v == null || (item[k+"s"] || []).includes(v)
)
);
}
var items = filterBySelected(users);
console.log(items);
.as-console-wrapper { max-height: 100% !important; top: 0; }