Как удалить свойство из объекта JavaScript?
Тема: Как удалить свойство объекта в JavaScript?
Привет, коллеги!
У меня есть объект JavaScript следующего вида:
let myObject = {
"ircEvent": "PRIVMSG",
"method": "newURI",
"regex": "^http://.*"
};
Мне нужно удалить свойство regex
, чтобы получить следующий объект:
let myObject = {
"ircEvent": "PRIVMSG",
"method": "newURI"
};
Как правильно осуществить удаление этого свойства? Какие методы лучше использовать для этого? Буду признателен за советы или примеры кода! Спасибо!
3 ответ(ов)
В JavaScript объекты можно воспринимать как отображения между ключами и значениями. Оператор delete
используется для удаления этих ключей, которые чаще всего называют свойствами объекта, по одному за раз.
var obj = {
myProperty: 1
}
console.log(obj.hasOwnProperty('myProperty')) // true
delete obj.myProperty
console.log(obj.hasOwnProperty('myProperty')) // false
Оператор delete
не освобождает память напрямую и отличается от простого присвоения значений null
или undefined
свойству тем, что свойство само по себе удаляется из объекта. Обратите внимание, что если значение удаляемого свойства было типом-ссылкой (объектом), и какая-то другая часть вашей программы все еще удерживает ссылку на этот объект, то этот объект, безусловно, не будет собран сборщиком мусора, пока все ссылки на него не исчезнут.
Оператор delete
будет работать только со свойствами, дескрипторы которых помечены как конфигурируемые.
В данном коде создается объект myObject
с тремя свойствами: ircEvent
, method
и regex
. После этого с помощью оператора delete
удаляется свойство regex
у этого объекта.
Когда вы пытаетесь вывести значение myObject.regex
в консоль, то выводится undefined
, так как свойство было удалено. Это поведение должно быть стабильным и работать во всех современных браузерах, включая Firefox и Internet Explorer.
Если вы хотите проверить, существует ли свойство объекта, можно использовать оператор in
или метод hasOwnProperty()
:
console.log('regex' in myObject); // logs: false
console.log(myObject.hasOwnProperty('regex')); // logs: false
Таким образом, удаление свойства объекта работает как ожидается, и это поведение полностью соответствует спецификации JavaScript.
Как клонировать объект без свойства:
Например:
let object = { a: 1, b: 2, c: 3 };
И нам нужно удалить a
.
С явно указанным ключом свойства:
const { a, ...rest } = object; object = rest;
С переменной ключа свойства:
const propKey = 'a'; const { [propKey]: propValue, ...rest } = object; object = rest;
Классная стрелочная функция 😎:
const removeProperty = (propKey, { [propKey]: propValue, ...rest }) => rest; object = removeProperty('a', object);
Для нескольких свойств:
const removeProperties = (object, ...keys) => (keys.length ? removeProperties(removeProperty(keys.pop(), object), ...keys) : object);
Использование
object = removeProperties(object, 'a', 'b'); // результат => { c: 3 }
Или
const propsToRemove = ['a', 'b'];
object = removeProperties(object, ...propsToRemove); // результат => { c: 3 }
Доступ к свойству объекта с динамически вычисляемым именем
Сортировка свойств объекта по значениям
Проверка существования вложенного ключа объекта JavaScript
Преобразование объекта JS в строку JSON
Почему null является объектом и в чем разница между null и undefined?