简体   繁体   中英

Remove an item from associative array in Javascript

I have an Array of objects, example

Item[0] ="{ id1: 1}";
Item[1] ="{ id2: 2}"; 
Item[2] ="{ id3: 3}"; 

I have to delete an item by knowing an specific id. For example, if i get id2, i have to delete Item[1].

I tried to solve it, but it deletes the last item

for (var i = 0; i < items.length; i++) {
            var _item = items[i];
            var funcId = getValueKey(_item);

        if(funcId == _item)
        {
            delete items[i];
        }      
        };

The getValueKey func

getValueKey: function(obj){
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                return key;

            }
        }

I solved it, thanks to me..

for (var i = 0; i < items.length; i++) {
            var _item = items[i];
            var funcId = getValueKey(_item);
            if(funcId ==id) {
                delete items[i];
            }

Your answer may work, but it seems like much more code than is required.

function removeMemberByValue(arr, value) {

  for (var i=0, iLen=arr.length; i<iLen; i++) {

    if (arr[i] && arr[i].hasOwnProperty(value));

      //Do 1 of the following, not both:

      // to remove member i (i.e. there will no longer be a member i)
      delete(arr[i]);

      // Remove member i and shift later members -1
      arr.splice(i, 1);

      return arr;  // return is optional
  }
}

In the above, the first option will result in removal of the member but all other members will keep the same index, eg

var arr = [{id1: 1}, {id2: 2}, {id3: 3}];
removeMemberByValue(arr, value); // [not defined, {id2: 2}, {id3: 3}]

where not defined means "does not exist".

The second option will move later members 1 lower in index, so:

removeMemberByValue(arr, value); // [{id2: 2}, {id3: 3}]

Choose whichever suits.

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