我有以下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"}
];
答案 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)
});