как удалить ключ+значение из хэша в javascript



дано



var myHash = new Array();
myHash['key1'] = { Name: 'Object 1' };
myHash['key2'] = { Name: 'Object 2' };
myHash['key3'] = { Name: 'Object 3' };


как мне удалить key2 и object 2 из хэша, так что он заканчивается в состоянии, как если бы я сделал:



var myHash = new Array();
myHash['key1'] = { Name: 'Object 1' };
myHash['key3'] = { Name: 'Object 3' };


удалить не делает то, что я хочу;



delete myHash['key2'] 


просто дает мне это:



var myHash = new Array();
myHash['key1'] = { Name: 'Object 1' };
myhash['key2'] = null;
myHash['key3'] = { Name: 'Object 3' };


единственные документы, которые я могу найти на splice и slice дело с целочисленными индексаторами, которых у меня нет.



Edit: я также не знаю, что' key2 ' обязательно находится в положении [1]



обновление



OK небольшая красная селедка, delete, похоже, делает то, что я хочу на поверхности, однако я использую json2.js для строки моего объекта в json для возврата на сервер,



после удаления myHash сериализуется как:



[ { Name: 'Object 1' }, null, { Name: 'Object 3' } ]


это ошибка в json2.Джей? или это то, что я делаю неправильно с delete?



спасибо

449   4  

4 ответов:

вы ищете delete:

delete myhash['key2']

посмотреть Core Javascript Guide

почему вы используете new Array(); для окрошки? Вы должны использовать new Object() вместо.

и я думаю, вы получите то, что вы хотите.

вы говорите, что не обязательно знаете, что 'key2' находится в положении [1]. Ну, это не так. Позицию 1 занял бы михаш[1].

вы злоупотребляете массивами JavaScript, которые (как и функции) позволяют хэши ключей/значений. Несмотря на то, что JavaScript позволяет это, он не дает вам возможности справиться с этим, как язык, предназначенный для ассоциативных массивов. Методы массива JavaScript работают только с нумерованными свойствами.

первое, что вы должны сделать, это переключиться на объекты, а не массивы. У вас нет веской причины использовать здесь массив, а не объект, поэтому не делайте этого. Если вы хотите использовать массив, просто пронумеруйте элементы и откажитесь от идеи хэшей. Целью массива является хранение информации, которая может быть индексирована в числовом выражении.

вы можете, конечно, поместить хэш (объект) в массив, если хотите.

myhash[1]={"key1","brightOrangeMonkey"};

другой вариант может быть таким John Resig remove method. может лучше соответствовать тому, что вам нужно. если вы знаете индекс в массиве.

Comments

    Ничего не найдено.