JQUERY-使用键从多维数组中删除数组

时间:2019-01-17 12:09:41

标签: javascript arrays multidimensional-array

如果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/

我该怎么办?

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 functiondestructing 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的对象

http://jsfiddle.net/u0qshcvf/2/