Подтвердить что ты не робот

Как удалить ключ + значение из hash в 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 не делает то, что я хочу;

delete myHash['key2'] 

просто дает мне следующее:

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

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

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

ОБНОВЛЕНИЕ

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

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

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

Является ли это ошибкой в ​​json2.js? или это что-то, что я делаю неправильно с удалением?

Спасибо

4b9b3361

Ответ 2

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

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

Ответ 3

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

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

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

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

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

Ответ 4

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