使用underscore.js在多个属性上过滤对象数组

时间:2015-10-02 15:57:00

标签: javascript arrays underscore.js

给出以下对象数组:

var files = [{
    name: "test1",
    size: 123
}, {
    name: "test1",
    size: 456
}, {
    name: "test2",
    size: 789
}]

如果我想要一个没有名称为" test1"的对象的新数组。以下大小123对我来说很有意义:

_.filter(files, function(_file) {
    return _file.name !== "test1" && _file.size !== 123;
});

然而;这总是删除名称为" test1"的两个项目。以下内容返回所需的结果:

_.filter(files, function(_file) {
    return _file.name !== "test1" || _file.size !== 123;
});

怎么回事?

1 个答案:

答案 0 :(得分:1)

你的实际情况应该是

return !(_file.name === "test1" && _file.size === 123);

因为只有当两个属性都与特定值匹配时才必须拒绝项目,而不是在任何属性与特定值不匹配时拒绝项目。

在您的代码中,对于第二个元素,_file.name !== "test1"实际上是false,整个表达式变为false,因此第二个项目也会被跳过。