如何提交一组必须满足javascript中所有条件的记录

时间:2018-06-09 21:09:02

标签: javascript

我有一组对象,它们根据选定的对象有一些可过滤的信息。

我有以下内容,并希望迭代selected中的键,只返回满足所有条件的项(在这种情况下,用户Amber的{​​{1}}为12 AND tagId 27)。

有一点需要注意,如果placementId过滤器等于null,则应将其从过滤中排除,因为这意味着用户不会过滤该过滤器。

这将变得像8个过滤器一样,所以不要做一些大的if语句。我怎么能这样做?

selected

1 个答案:

答案 0 :(得分:1)

您可以使用Array#filterObject.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; }