如何在JavaScript.filter()中使用多个条件?

如何在JavaScript.filter()中使用多个条件?,javascript,Javascript,我正在尝试使用来自的方法筛选数组,但似乎无法使其正常工作。我的设置如下所示,我希望得到一个空数组,因为数组中的一个对象与筛选条件匹配,但它会在控制台中返回原始数组。这里有什么我遗漏的吗 var myArr = [ { link_source_id: "act_0", link_source_name: "Hello World!", link_target_id: "obj_1",

我正在尝试使用来自的方法筛选数组,但似乎无法使其正常工作。我的设置如下所示,我希望得到一个空数组,因为数组中的一个对象与筛选条件匹配,但它会在控制台中返回原始数组。这里有什么我遗漏的吗

var myArr = [
    {
        link_source_id: "act_0",
        link_source_name: "Hello World!",
        link_target_id: "obj_1",
        link_target_name: "Document",
        link_type: "activity-object-input"
    }
]

var myFilter = {
    link_source_id: "act_0",
    link_target_id: "obj_1"
}

myArr = myArr.filter(function (item) {
  for (var key in myFilter) {
    if (
      item[key] === undefined ||
      item[key] !== myFilter[key]
    )
      return false;
  }
  return true;
});

console.log(myArr)
这里有一个例子

const obj = [
    {id:1 , name:"Alice"} , {id:1,name:"Bob"}
]

const arr = obj.filter((oneObj)=>{
    return (oneObj.id==1 && oneObj.name=="Alice")
})

console.log(arr); // will log [{id:1 , name:"Alice"}]
这里有一个例子

const obj = [
    {id:1 , name:"Alice"} , {id:1,name:"Bob"}
]

const arr = obj.filter((oneObj)=>{
    return (oneObj.id==1 && oneObj.name=="Alice")
})

console.log(arr); // will log [{id:1 , name:"Alice"}]

我将把这留给其他人,但根据OP中的评论回答我自己的问题。交换
true
false
语句应该可以解决问题:

var myArr = [
    {
        link_source_id: "act_0",
        link_source_name: "Hello World!",
        link_target_id: "obj_1",
        link_target_name: "Document",
        link_type: "activity-object-input"
    }
]

var myFilter = {
    link_source_id: "act_0",
    link_target_id: "obj_1"
}

myArr = myArr.filter(function (item) {
  for (var key in myFilter) {
    if (
      item[key] === undefined ||
      item[key] !== myFilter[key]
    )
      return true;
  }
  return false;
});

console.log(myArr)

我将把这留给其他人,但根据OP中的评论回答我自己的问题。交换
true
false
语句应该可以解决问题:

var myArr = [
    {
        link_source_id: "act_0",
        link_source_name: "Hello World!",
        link_target_id: "obj_1",
        link_target_name: "Document",
        link_type: "activity-object-input"
    }
]

var myFilter = {
    link_source_id: "act_0",
    link_target_id: "obj_1"
}

myArr = myArr.filter(function (item) {
  for (var key in myFilter) {
    if (
      item[key] === undefined ||
      item[key] !== myFilter[key]
    )
      return true;
  }
  return false;
});

console.log(myArr)

try=>
if()else返回true
-顺便说一句,它将返回
数组
…如果其中一个键值匹配,您的条件将为
true
-如果
两者都匹配,它将返回
false
,否则如果交换返回false/true,则始终为
true
,然后返回一个空数组,因为条件都会为array@Dream_Cap我刚刚做到了,现在一切都正常了。我觉得我没有领会到这一点很傻。try=>
if()否则返回true
-顺便说一句,它将返回
数组
…如果其中一个键值匹配,您的条件将为
true
,如果
两者都匹配,它将返回
false
否则总是
true
如果您交换返回false/true,然后返回一个空数组,因为条件都会为array@Dream_Cap我刚刚做到了,现在一切都正常了。你的问题和答案中的
代码片段都是正确的。一个过滤器是
正的
(它过滤掉匹配项),另一个是
负的
(它过滤掉不匹配项)。您的问题和答案中的
代码片段都是正确的。一个过滤器是
正的
(它过滤掉匹配项),另一个是
负的
(它过滤掉不匹配项)。