J'ai un objet comme suit:
let obj = {foo: 1, bar: 2, baz: 3}
Je souhaite supprimer une propriété spécifique en appelant une méthode qui prend en paramètre le nom de la propriété à supprimer
removeProperty(obj, propertyName) {
let { propertyName, _, ...result } = obj
return result
}
le problème est que cette méthode ne fonctionne que lorsque nous écrivons le nom de la propriété directement dans la séquence de syntaxe, comme: let { bar, _, ...result } = obj
.Mais cela ne fonctionne pas en le passant comme paramètre, car la syntaxe spead le crée comme une nouvelle variable
comment pouvons-nous faire cela, avec une autre solution si possible, sauf le omit
de lodash
Vous pouvez utiliser des propriétés calculées dans la déstructuration:
let obj = {foo: 1, bar: 2, baz: 3}
function removeProperty(obj, propertyName) {
let { [propertyName]: _, ...result } = obj
return result
}
console.log(removeProperty(obj, 'foo'));
Cela affectera la propriété avec le nom de la valeur propertyName
à une variable jetable et supprimera essentiellement cette clé. Voir la documentation MDN .
Une autre alternative à destructuring
serait d'utiliser delete
. La solution suivante réduit la complexité temporelle d'environ 35% par rapport à destructuring
(dans Chrome de bureau)
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'));
Les résultats varient en fonction du navigateur utilisé. Les résultats sont plutôt intrigants. Desktop Safari destructuring
surpasse delete
, mais Desktop Chrome out exécute tous les nombres de Desktop Safari.
+-----------------------------------+
| Browser | delete | destructure |
+---------+-----------+-------------+
| Chrome | 3,229,791 | 1,993,256 |
| Safari | 1,186,679 | 1,872,396 |
+---------+-----------+-------------+
Les résultats sur iOS sont moins surprenants, car Chrome est vraiment Safari sous le capot.
+-----------------------------------+
| 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