2012-04-16 2 views
3

Я следующий многомерный массив:Удалить элемент из многомерного массива

{"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}} 

В этом примере я хочу удалить

"1":{"cid":"1","uid":"3"} 

от него. Я пробовал все решения, которые я нашел в stackoverflow, и не мог заставить их работать. Я в основном человек php, поэтому я могу пропустить что-то важное здесь?

+3

Это не массив что это 'Object' , –

+1

Чтобы получить массив, вы должны использовать '[]' not '{}'. –

+1

Возможный дубликат [как удалить ключ из объекта JavaScript?] (Http://stackoverflow.com/questions/3455405/how-to-remove-a-key-from-a-javascript-object) –

ответ

12

Просто используйте delete с соответствующим имуществом.

var obj = {"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}}; 

delete obj["1"]; 

Обратите внимание на " вокруг 1, чтобы пометить его как идентификатор, а не как индекс массива!

EDIT Как было отмечено в комментарии, obj не является объектом и не массив, независимо от того, как вы обращаетесь к [1] собственности. Мое последнее замечание состояло в том, чтобы четко указать, что вы работаете с объектом, а не с массивом.

В моем опыте большинство людей связывают целочисленные свойства с массивами и строковыми свойствами с объектами. Поэтому я подумал, что было бы более полезно выделить свойство так, как это указано.

+4

Это не индекс массива, потому что * obj * - это объект, а не потому, что это значение. Ранним шагом в разрешении имен свойств является преобразование их в строки, поэтому результат 'obj [1]' и 'obj ['1']' неразличимы одинаковым образом. Obj [(function() {return 1; }())] 'будет. А поскольку массивы являются объектами, 'array [1]' идентичен в результате для 'array ['1']'. – RobG

4
var myObj= {"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}} 

delete myObj['1']; 

alert (myObj['1']); 

пожалуйста заметьте есть проблемы Кроссплатформенные со стиранием:

Кросс-браузер выдает

Хотя ECMAScript делает итерации порядок объектов зависит от реализации, может показаться, что все основные браузеры поддерживает порядок итераций, основанный на самом раннем добавленном объекте, прибывшем сначала (по крайней мере, для свойств, не принадлежащих прототипу). Тем не менее, в случае случае Internet Explorer, когда вы используете delete в свойстве, некоторые приводят к запутанным результатам поведения, не позволяя другим браузерам использовать простые объекты, такие как объектные литералы, как упорядоченные ассоциативные массивы. В проводнике , в то время как значение свойства действительно установлено в undefined, если один позже добавляет свойство с тем же именем, свойство будет , итерированное в его прежнем положении - не в конце последовательности итераций как один может ожидать после того, как он удалил свойство, а затем добавил обратно.

+1

с использованием точечной нотации по числовым индексам дает синтаксические ошибки, используйте скобки! –

+1

@EliasVanOotegem ive уже исправил его, пока вы писали это сообщение. –

+0

Похоже, вы цитируете MDN. Вероятно, хорошая идея кредитовать источник. :) –

1

JavaScript не имеет многомерных массивов, только массивы и объекты. При этом: delete theObject['1']; должен работать нормально

+1

javascript действительно имеет многомерные массивы. – jbabey

+0

@jbabey: предоставлено, если все ключи являются числовыми, var будет вести себя как массив, но в этом примере: если вы присваиваете значения шаг за шагом ('var theArray = []; theArray ['1'] = []; theArray ['1'] ['cid'] = '2'; '), попробуйте сделать что-то вроде' theArray ['1']. Length' или попробуйте 'theArray.length'. Эти методы возвращают '0' и' 2' соответственно. Лучше всего подойти к var как к объекту. –

+0

Я понимаю, что OP не использует массивы, но это не значит, что многомерные массивы javascript перестают существовать: P – jbabey

0

Присвойте Object (не Array) переменной, так:

var o = {"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}}; 

Затем сделать:

delete o['1']; 

Вот именно!

0

Вы можете использовать удалить в JavaScript Ex:

var x = {"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}}; 

delete x['1']; 

Кроме того, проверить это:

Deleting Objects in JavaScript

1
var arr=[[10,20,30],[40,50,60],[70,80,90]]; 

for(var i=0;i<arr.length;i++){ 
    for(var j=0;j<arr[i].length;j++){ 
     if(arr[i][j]==50){ 
      arr[i].splice(j,1); 
     } 
    } 
} 

document.write(arr); 
+1

Добавьте некоторое объяснение с ответом на вопрос, как этот ответ помогает OP в устранении текущей проблемы –

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