JavaScript - распространять и использовать синтаксис для удаления определенного свойства из объекта
У меня есть объект следующим образом:
let obj = {foo: 1, bar: 2, baz: 3}
Я хотел бы удалить конкретное свойство, вызвав метод, который принимает в качестве параметра имя свойства для удаления
removeProperty(obj, propertyName) {
let { propertyName, _, ...result } = obj
return result
}
проблема в том, что этот метод работает, только когда мы записываем имя свойства непосредственно в синтаксис, например: let { bar, _, ...result } = obj
.Но это не работает, передавая его в качестве параметра, потому что синтаксическая команда создает его как новую переменную
как мы можем это сделать, с другим решением, если это возможно, кроме omit
Лодаш
2 ответа
Вы можете использовать вычисленные свойства в деструктурировании:
let obj = {foo: 1, bar: 2, baz: 3}
function removeProperty(obj, propertyName) {
let { [propertyName]: _, ...result } = obj
return result
}
console.log(removeProperty(obj, 'foo'));
Это назначит свойство с именем значения propertyName
к одноразовой переменной и по существу удалите этот ключ. Смотрите документацию MDN.
Еще одна альтернатива destructuring
будет использовать delete
, Следующее решение уменьшает сложность времени примерно на 35% по сравнению с destructuring
(в Desktop Chrome)
Решение
let obj = {foo: 1, bar: 2, baz: 3}
function removeProperty(obj, propertyName) {
let newObj = {...obj};
delete newObj[propertyName];
return newObj;
}
console.log(removeProperty(obj, 'foo'));
Тест производительности
Результаты варьируются в зависимости от используемого браузера. Результаты довольно интригующие. Настольное Safari destructuring
Превосходит delete
, но Desktop Chrome Out выполняет все числа из Desktop Safari.
+-----------------------------------+
| Browser | delete | destructure |
+---------+-----------+-------------+
| Chrome | 3,229,791 | 1,993,256 |
| Safari | 1,186,679 | 1,872,396 |
+---------+-----------+-------------+
Результаты на iOS менее удивительны, так как Chrome - это действительно Safari под капотом.
+-----------------------------------+
| Browser | delete | destructure |
+---------+-----------+-------------+
| Chrome | 1,146,496 | 1,785,551 |
| Safari | 1,182,067 | 1,793,772 |
+---------+-----------+-------------+
Документация
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete
values = {
id: 1,
name: 'hello world',
vehicle: 'car',
time: '3.30 pm',
date: '02 MAR 1990',
};
const { time, date, ...rest } = values;
now ***...rest*** contains the object values of {
id: 1,
name: 'hello world',
vehicle: 'car',
};