Je crée un objet avec plusieurs propriétés -
var objOpts = {
option1: 'Option1',
option2: 'Option2',
option2: 'Option3'
};
J'ajoute ensuite quelques propriétés plus tard -
objOpts.option4 = 'Option4'
objOpts.option5 = 'Option5'
J'en ai ensuite terminé avec les deux dernières propriétés créées ("Option4" et "Option5") et je souhaite effacer/supprimer les deux.
Actuellement, je le ferais comme si -
delete objOpts.option4
delete objOpts.option5
Y a-t-il une autre façon de s'y prendre? Imaginez que j'avais ajouté 5 propriétés supplémentaires et que je devais les effacer/supprimer, ce qui représenterait cinq lignes de code «supprimer» presque identique.
Je suis sûr que vous essayez d'ajouter des propriétés personnalisées à un objet.
Une façon plus simple que je suggérerais est de créer une propriété secondaire:
objOpts.custom.option4 = 'Option4'
objOpts.custom.option5 = 'Option5'
de cette façon, vous pourriez delete objOpts.custom
et en finir. Notez qu'après cette étape, vous devrez recréer objOpts.custom = {}
.
De plus, cette façon de faire se sentirait plus proche de la programmation orientée objet, car vos propriétés publiques se distingueraient facilement des propriétés privées.
Si vous commencez par supprimer des objets en JavaScript, j'aimerais citer un article très bien écrit sur le sujet: http://perfectionkills.com/understanding-delete/
Vous pouvez jouer avec les méta-propriétés qui vous permettent de protéger les propriétés contre la suppression, etc. (pour créer un flux de codage encore meilleur pour votre cas)
MODIFIER:
J'aimerais ajouter qu'au lieu de supprimer et de recréer la propriété, vous pouvez simplement dire objOpts.custom = {}
, ce qui libérerait le option4
et le option5
de la mémoire (éventuellement via Garbage Collection).
Il existe une solution simple utilisant la bibliothèque lodash.
La fonction _.omit
prend votre objet et un tableau de clés que vous souhaitez supprimer et renvoie un nouvel objet avec toutes les propriétés de l'objet d'origine, à l'exception de celles mentionnées dans le tableau.
C’est une façon élégante d’enlever des clés, car en utilisant cela, vous obtenez un nouvel objet et l’objet original reste intact. Cela évite le problème de la mutation: si nous retirions les clés de l'objet d'origine, toutes les autres parties du code utilisant cet objet pourraient avoir tendance à casser ou à introduire des bogues dans le code.
Exemple
var obj = {x:1, y:2, z:3};
var result = _.omit(obj, ['x','y']);
console.log(result);
//Output
result = {z:3};
Lien pour la documentation de la même Cliquez ici
Une solution consiste à créer une fonction séparée qui prend en argument votre objet et vos propriétés.
Code également ci-dessous:
var objOpts = {
option1: 'Option1',
option2: 'Option2',
option3: 'Option3',
option4: 'Option4'
};
/**
* Method for removing object properties
*
*/
var removeObjectProperties = function(obj, props) {
for(var i = 0; i < props.length; i++) {
if(obj.hasOwnProperty(props[i])) {
delete obj[props[i]];
}
}
};
// remove
removeObjectProperties(objOpts, ["option1", "option2"]);
// objOpts - after
console.log(objOpts);
ES6 propose une solution élégante à ce problème: Reste la destruction d’objets:
let {a, b, ...rest} = { a: 10, b: 20, c: 30, d: 40 };
console.log(rest); // { c: 30, d: 40 }
Notez que cela ne modifie pas l'objet d'origine, mais certaines personnes peuvent toujours trouver cela précieux.
Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
Je voudrais également fournir une méthode plus moderne que Mauno Vänä:
function deleteProps (obj, prop) {
for (let p of prop)
(p in obj) && (delete obj[p]);
}
Exemple:
// Create sample object
const myObject = {
a: 'Foo',
b: 'Baa',
c: 'Oof'
};
// Prints: {a: "Foo", b: "Baa", c: "Oof"}
console.log(myObject);
// Delete props
deleteProps(myObject, ['a', 'b']);
// Prints: {c: "Oof"}
console.log(myObject);
var obj = {"key1":1,"key2":2,"key3":3,"key4":4};
if (!('multidelete' in Object.prototype)) {
Object.defineProperty(Object.prototype, 'multidelete', {
value: function () {
for (var i = 0; i < arguments.length; i++) {
delete this[arguments[i]];
}
}
});
}
obj.multidelete("key1","key3");
Vous pouvez l'utiliser comme ceci pour supprimer plusieurs clés dans un objet.
Object.keys(object).forEach((prop) => delete object[prop]);