Як видалити ключ + значення з хешу в


78

Дано

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]

ОНОВЛЕННЯ

Добре, невеликий червоний оселедець, видалення, здається, робить те, що я хочу, на поверхні, однак, я використовую json2.js, щоб розв’язати мій об’єкт на json для повернення назад на сервер,

після видалення myHash серіалізується як:

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

Це помилка в json2.js? чи це щось я роблю не так із видаленням?

Дякую


3
Ви робите додавання властивостей до об’єкта, що відрізняється від додавання елементів до масиву / хешу. Ви шукаєте спосіб більш-менш вилучити майно. Спробуйте видалити myHash.key1, як зазначалося в інших коментарях.
Девід Андрес

2
Якщо це хеш-таблиця, вам слід використовувати var myHash = new Object()замість var myHash = new Array().
cprcrack

Відповіді:


183

Ви шукаєте delete:

delete myhash['key2']

Див. Основний посібник Javascript


1
Я вважав, що це правильно, ось чому я спробував це спочатку. Це , здається , на роботу, моя проблема на насправді лежить в JSON.stringify, погано оновить питання
Ендрю Баллок

8
використовуйте замість цього функцію сплайсингу. Delete залишає діру в масиві.
Девід Андрес

2
Ось вищезазначена функція сплайсингу btw.
Per Lundberg

Це не найкращий варіант, коли зміни в myhashповинні відбуватися лише в поточному обсязі. deleteможе мати побічні ефекти, якщо змінні в інших місцях посилаються на myhashоб’єкт.
max pleaner

Made my day @ karim79 tysm

11

Чому ви використовуєте new Array();для хешу? Вам потрібно використовувати new Object()замість цього.

І я думаю, ти отримаєш те, що хочеш.


4
Я зовсім не люблю нове. Я віддаю перевагу var myHash = [];
Nosredna

10
Або в цьому випадку myHash = {}; :-)
Носредна

Я згоден. Єдине, що дає масив, це довжина, яка ніколи не працює, коли ви змінюєте індексатор чимось іншим, ніж int.
Ваш друг Кен

6

Ви говорите, що не обов’язково знаєте, що „key2” знаходиться у позиції [1]. Ну, це не так. Позицію 1 займав би myHash [1].

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

Перше, що вам слід зробити, це перейти до об’єктів, а не до масивів. У вас немає вагомих причин використовувати тут масив, а не об’єкт, тому не робіть цього. Якщо ви хочете використовувати масив, просто пронумеруйте елементи і відмовтеся від ідеї хешів. Призначення масиву полягає у зберіганні інформації, яку можна проіндексувати чисельно.

Звичайно, ви можете додати хеш (об’єкт) до масиву, якщо хочете.

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

1

Іншим варіантом може бути цей метод видалення Джона Резіга . може краще підходити до того, що вам потрібно. якщо ви знаєте індекс масиву.


2
ну, відсутність індексу - саме те, про що йдеться в питанні
Ендрю Баллок

Привіт @AndrewBullock У мене є один запит, я отримую масив JSON Приклад: [{\ "Countrycode \": \ "DE \", \ "count \": \ "3 \"}], але я хочу отримати як [{"DE ":" 3 "}] як це, але я не отримую цього результату Будь ласка, допоможіть мені
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.