如何根据多个参数过滤js对象数组

时间:2016-01-18 16:43:10

标签: javascript jquery arrays filter

我有以下js数组:

var arr= [{id: "123", name: "Foo"},
          {id: "123", name: "Bar"},
          {id: "345", name: "Foo"},
          {id: "678", name: "FooBar"}
         ];

我有一个onclick事件,我获取了被点击元素的ID和名称。

var name = $( this ).data('name');
var id = $( this ).data('id');

这是我用来从数组中删除元素的函数。

arr = arr.filter( function(elem) { 
                                 return elem.id != id 
                                 && elem.name != name;
                                 });

如果我只使用id或过滤器函数中的名称,它可以工作,但它们一起不起作用。如果单击的项目具有id-123和name-Foo,那么所有元素(具有id-123或name-Foo)都将被删除,我将离开

var arr= [{id: "678", name: "FooBar"}
         ];

我只需要将两者都删除,因此结果应为:

var arr= [
          {id: "123", name: "Bar"},
          {id: "345", name: "Foo"},
          {id: "678", name: "FooBar"}
         ];

3 个答案:

答案 0 :(得分:0)

更正循环对象数组的语法:

var arr = [
  {id: 123, name: Foo},
  {id: 123, name: Bar},
  {id: 345, name: Foo}
];

答案 1 :(得分:0)

不能发表评论直到50个代表,但我猜你在宣布数组时在原帖中输了一个错字?

作为解决方案,您可以更改为:

elem.id === id && elem.name === name;
// and then remove the matching element from the array with .splice()?

答案 2 :(得分:0)

编写过滤函数的更直观的方法可能是这样的:

var arr= [{id: "123", name: "Foo"},
          {id: "123", name: "Bar"},
          {id: "345", name: "Foo"},
          {id: "678", name: "FooBar"}
         ];

var name = 'Foo';
var id = '123';

arr = arr.filter(function(elem) {
  //return false for the element that matches both the name and the id
  return !(elem.id == id && elem.name == name)
});