Например, с помощью Lodash omit, чтобы удалить свойства объекта с этим фрагментом кода:

this.current.obj = omit(this.current.obj, ['sellerSupportWeb', 'sellerSupportAgency', 'sellerSupportAgent'])

Но это создаст другой объект this.current.obj, но в моем случае мне нужно сохранить тот же объект

У вас есть альтернативное решение? Но не оператор delete

4
Mouad Ennaciri 25 Авг 2017 в 15:19

4 ответа

Лучший ответ

Вы можете использовать _.unset() lodash для удаления свойства из объекта:

var obj = { a: 1, b: 2, c: 3 };

_.unset(obj, 'a');

console.log(obj);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
2
Ori Drori 25 Авг 2017 в 12:47

Нет, альтернативного решения нет. Я настоятельно рекомендую использовать чисто функциональный подход: не изменяйте переменные, а трансформируйте их и создавайте новые. Если вам нужно сохранить один и тот же объект (то же самое распределение памяти), тогда оператор delete - единственный вариант.

1
lukaleli 25 Авг 2017 в 12:24

У вас есть альтернативное решение? Но не оператор delete

Нет. Вы можете создать новый объект только с теми свойствами, которые вам нужны, или использовать оператор delete, чтобы удалить свойство из существующего объекта (что может оказать существенное влияние на производительность поиска свойств, хотя будет ли это иметь значение, зависит о том, как часто вы используете свойства этого объекта).

Хорошо, технически вы можете обернуть Proxy обведите оригинал и используйте хуки has, ownKeys, get и т. д., чтобы сделать вид, что свойство не существует. Но вы должны получить доступ к нему через прокси.

2
T.J. Crowder 25 Авг 2017 в 12:36

Вы можете установить для свойства значение undefined, тогда при попытке доступа к нему результат будет таким же, как если бы свойство не существовало.

myObject = {
    myProp = 'myValue'
}

myObject.myProp = undefined;
console.log(myObject.myProp);
console.log(myObject.inexistentProp);
0
viltor 25 Авг 2017 в 12:44