我正在尝试删除多维数组中的一个数组,如果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/
我怎么能这样做呢?
发布于 2019-01-17 20:19:24
您当前解决方案的问题是您没有正确使用.filter
。.filter
期望其传递的函数返回一个boolean
。如果返回true
,则当前元素将保留在新生成的数组中。如果为false
,则省略当前元素。因此,不要尝试使用.splice
从test_arr
中删除元素,而是使用.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"}]
如果你想要一个“更干净”的解决方案,你可以使用带有destructing assignment的arrow function
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);
发布于 2019-01-17 20:26:35
@Nick已经给出了没有.splice
的解决方案,但是如果出于任何原因你仍然想使用.splice
解决方案,你可以尝试下面的代码。
您正在以错误的方式检查id
,在下面的解决方案中,它将删除id
- 123456的所有对象
http://jsfiddle.net/u0qshcvf/2/
https://stackoverflow.com/questions/54235627
复制相似问题