Как удалить объекты из ассоциативного массива JavaScript?

Предположим, у меня есть этот код:

var myArray = new Object();
myArray["firstname"] = "Bob";
myArray["lastname"] = "Smith";
myArray["age"] = 25;

Теперь, если я хочу удалить «фамилию»? .... есть ли какой-нибудь эквивалент
myArray["lastname"].remove()?

(Мне нужно убрать элемент, потому что количество элементов важно, и я хочу, чтобы все было чисто.)

578
задан 14.04.2020, 11:09

2 ответа

Используйте "удалить" ключевое слово в JavaScript.

delete myArray["lastname"];
<час>

РЕДАКТИРОВАНИЕ:

В некотором механизме JavaScript, удалить ключевое слово могло бы повредить производительность, поскольку это отменит компиляцию / оптимизация JIT.

http://www.html5rocks.com/en/tutorials/speed/v8/ http://www.smashingmagazine.com/2012/11/writing-fast-memory-efficient-javascript/

1077
ответ дан 14.04.2020, 11:11
  • 1
    Это похоже на хорошее решение, оно походит на правильное решение, но увы, я don' t больше работают над тем проектом. – McKay 30.12.2019, 08:07
  • 2
    @johndodo - Верный. Именно поэтому я запустил свой первоначальный комментарий с , Это вызовет проблемы , если использовал на Массив экземпляр объекта . Я, тем не менее, предпочитаю подход, который работает правильно во всех случаях, см. мой ответ ниже. – Saul 14.04.2020, 11:11
  • 3
    Какие проблемы будут вызваны? – Gottox 14.04.2020, 11:12
  • 4
    @Gottox - length свойство объекта Массива остается неизменным. – Saul 14.04.2020, 11:12
  • 5
    Это вызовет проблемы, если используется на экземпляре объекта Массива удалить существующий элемент, например, delete myArray[0]. См. stackoverflow.com/a/9973592/426379 и элементы массива Удаления – Saul 14.04.2020, 11:12
  • 6
    @Saul: там был бы быть проблемами, если myArray действительно использовался в качестве массива - но это не (myArray, неудачное имя), это - объект. Так в этом случае delete в порядке. Обратите внимание что, даже если бы это создавалось как new Array() и использовалось в качестве ассоциативного массива, это все еще было бы в порядке. Ваше предупреждение - все еще что-то, чтобы знать, если Вы используете действительные массивы все же. – johndodo 14.04.2020, 11:13

Все объекты в JavaScript реализованы как хеш-таблицы/ассоциативные массивы. Так, следующее эквивалент:

alert(myObj["SomeProperty"]);
alert(myObj.SomeProperty);

И, как уже обозначено, Вы "удаляете" свойство из объекта через delete ключевое слово, которое можно использовать двумя способами:

delete myObj["SomeProperty"];
delete myObj.SomeProperty;

Hope дополнительная информация помогает...

75
ответ дан 14.04.2020, 11:16
  • 1
    должен быть отмечен что запись через точку doesn' t работают если свойство isn' t простой термин. т.е. myObj['some;property'] работы, но myObj.some;property wouldn' t (по очевидным причинам). Также не могло бы быть очевидно, что можно использовать переменную в нотации скобки, т.е. var x = 'SomeProperty'; alert(myObj[x]) – Kip 14.04.2020, 11:16

Теги

Похожие вопросы