2013-10-29 4 views
0

У меня есть массив объектов, примерУдаление элемента из ассоциативного массива в JavaScript,

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

я должен удалить элемент, зная специфичный идентификатор. Например, если я получаю id2, я должен удалить Item [1].

Я пытался решить, но он удаляет последний элемент

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

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

getValueKey функ

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

      } 
     } 
+6

Это массив строк, а не массив объектов. –

+1

Что это за странное форматирование? Почему вы используете строки? Что делает ваш код «ассоциативным», если вы не ссылаетесь на идентификатор в ключе массива? – h2ooooooo

+0

У вас нет массива объектов. У вас есть массив строк. –

ответ

1

Я решил это, благодаря мне ..

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

Ваш ответ может работать, но, похоже, гораздо больше кода, чем требуется.

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

В приведенном выше примере первый вариант приведет к удалению элемента, но все остальные члены сохранят один и тот же индекс, например.

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

где не определен средства "не существует".

Второй вариант будет двигаться позже элементы 1 ниже индекса, так:

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

Выберите какой подходит.

Смежные вопросы