给出以下对象数组:
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;
});
怎么回事?
答案 0 :(得分:1)
你的实际情况应该是
return !(_file.name === "test1" && _file.size === 123);
因为只有当两个属性都与特定值匹配时才必须拒绝项目,而不是在任何属性与特定值不匹配时拒绝项目。
在您的代码中,对于第二个元素,_file.name !== "test1"
实际上是false
,整个表达式变为false
,因此第二个项目也会被跳过。