web-dev-qa-db-fra.com

Supprimer plusieurs propriétés d'objet?

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.

23
Stefano

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).

8
Sunny R Gupta

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

23
Akshat Gupta

Une solution consiste à créer une fonction séparée qui prend en argument votre objet et vos propriétés.

Exemple de violon Js

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);
8
Mauno Vähä

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

6
Stephen Paul

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);
2
Simon
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.

0
Yogesh Katkar
Object.keys(object).forEach((prop) => delete object[prop]);
0
wilsonpage