简体   繁体   中英

JQUERY - remove array from a multidimensional array with key

I am trying to remove an array in a multidimensional array if the id is the same off the given one.

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/

How Could I do this?

The issue with your current solution is that you're not using .filter correctly. .filter expects its passed function to return a boolean . If true is returned, the current element will be kept in the newly generated array. If it is false , the current element will be omitted. So, instead of trying to remove the element from test_arr using .splice , use .filter to decide what stays and what gets removed.

Also, note that in your example v is referring to a given element (a particular object) in your test_array . Thus, you do not need to target index 0 of your object, but rather you need to get the id of the current object.

 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"}] 

If you want a "cleaner" solution you can use an arrow function with 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); 

@Nick had given solution without .splice , but If for any reason you still want to go for .splice solution, you can try below code.

You are were checking id in wrong way, in below solution it will remove all objects with id - 123456

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM