2013-11-06 4 views
2

Позвольте мне объяснить.Как удалить объект в объекте JSON?

Я получил этот JSON с большим количеством объектов:
data = [{"id":"784","label":"blah","publisher":"me"},{"id":"785","label":"bleh","publisher":"you"},{"id":"786","label":"blih","publisher":"she"}];

Ex: Я хочу, чтобы удалить объект, где ID = 785

Я пробовал:

$.each(data, function(key, value) { 
if(value.id == '785'){ 
    delete data[key]; 
} 
}); 

Он работает, но он изменяет структуру данных. Теперь кажется, что это:

data = ["0":{"id":"784","label":"blah","publisher":"me"},"2":{"id":"786","label":"blih","publisher":"she"}] 

Я работаю с плагином, который не принимает эту структуру (JQuery UI автозаполнения). Поэтому мне нужно удалить объект без изменения структуры данных.

Любая помощь?

+0

довольно tha n 'delete', просто удалите его, как будто вы удаляете значение массива (потому что это то, что вы делаете) –

+0

Я не могу воспроизвести проблему. Какая версия jQuery? – plalx

+1

Этот вопрос, по-видимому, основан на недопустимых предположениях, поскольку проблема не воспроизводится. – plalx

ответ

2

Другой способ сделать это с помощью фильтра на массив:

var data = [{"id":"784","label":"blah","publisher":"me"},{"id":"785","label":"bleh","publisher":"you"},{"id":"786","label":"blih","publisher":"she"}]; 

var result = data.filter(function(x){return x.id !== '785'; }); 

HTH

+1

Это самое элегантное решение. –

+0

Спасибо, сэр. Работайте! –

1

Это массив объектов, поэтому попробуйте:

for (var i = 0; i < data.length; i++) { 
    if (data[i].id == 785) { 
     data.splice(i, 1); 
     break; 
    } 
} 
+0

Вы не хотите 'data = data.splice (...)', просто 'data.splice (...)'. Это мутатор. Возвращаемое значение - это вещь, которую он удалил *. – hobbs

+0

Просто увидел, что, спасибо за редактирование, пытался вспомнить, нужно ли «сращивание». – tymeJV

+0

Не было моего редактирования, но не проблема :) – hobbs

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