如果ID与给定的ID相同,我正在尝试删除多维数组中的一个数组。
var test_arr = [{"name":"qqq", "city":"it","id":"123456"}, {"name":"ggg", "city":"uk","id":"777456"}];
var result = test_arr.filter(function(v,i) {
if (v[0] === '123456'){ test_arr.splice(i,1) }
});
//alert( test_arr[0].id)
alert(result)
http://jsfiddle.net/ofLg0vq5/2/
我该怎么办?
答案 0 :(得分:1)
当前解决方案的问题是您没有正确使用.filter
。 .filter
期望其传递的函数返回boolean
。如果返回true
,则当前元素将保留在新生成的数组中。如果为false
,则将省略当前元素。因此,与其尝试使用test_arr
从.splice
中删除元素,不如使用.filter
来决定保留什么和删除什么。
此外,请注意,在您的示例中,v
是指test_array
中的给定元素(特定对象)。因此,您不需要定位对象的索引0
,而是需要获取当前对象的id
。
var test_arr = [{"name":"qqq", "city":"it","id":"123456"}, {"name":"ggg", "city":"uk","id":"777456"}];
test_arr = test_arr.filter(function(elem) {
return elem.id !== '123456';
});
console.log(test_arr); // [{"name": "ggg", "city": "uk", "id": "777456"}]
如果您想要“更清洁”的解决方案,可以将arrow function与destructing assignment结合使用:
test_arr = test_arr.filter(({id}) => id !== '123456'); // [{"name": "ggg", "city": "uk", "id": "777456"}]
var test_arr = [{"name":"qqq", "city":"it","id":"123456"}, {"name":"ggg", "city":"uk","id":"777456"}];
test_arr = test_arr.filter(({id}) => id !== '123456'); // [{"name": "ggg", "city": "uk", "id": "777456"}]
console.log(test_arr);
答案 1 :(得分:1)
@Nick在没有.splice
的情况下给出了解决方案,但是
如果出于某种原因您仍然想寻求.splice
解决方案,则可以尝试以下代码。
您正在以错误的方式检查id
,在以下解决方案中,它将删除所有带有id
-123456的对象