75

Как удалить свойство из объекта JavaScript?

18

Тема: Как удалить свойство объекта в JavaScript?

Привет, коллеги!

У меня есть объект JavaScript следующего вида:

let myObject = {
  "ircEvent": "PRIVMSG",
  "method": "newURI",
  "regex": "^http://.*"
};

Мне нужно удалить свойство regex, чтобы получить следующий объект:

let myObject = {
  "ircEvent": "PRIVMSG",
  "method": "newURI"
};

Как правильно осуществить удаление этого свойства? Какие методы лучше использовать для этого? Буду признателен за советы или примеры кода! Спасибо!

3 ответ(ов)

11

В 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 будет работать только со свойствами, дескрипторы которых помечены как конфигурируемые.

3

В данном коде создается объект 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.

1

Как клонировать объект без свойства:

Например:

let object = { a: 1, b: 2, c: 3 };

И нам нужно удалить a.

  1. С явно указанным ключом свойства:

    const { a, ...rest } = object;
    object = rest;
    
  2. С переменной ключа свойства:

    const propKey = 'a';
    const { [propKey]: propValue, ...rest } = object;
    object = rest;
    
  3. Классная стрелочная функция 😎:

    const removeProperty = (propKey, { [propKey]: propValue, ...rest }) => rest;
    
    object = removeProperty('a', object);
    
  4. Для нескольких свойств:

    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 }
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь