2014-07-21 11 views
14

creo un oggetto dalle molteplici proprietà -Elimina più proprietà oggetto?

var objOpts = { 
    option1: 'Option1', 
    option2: 'Option2', 
    option2: 'Option3' 
}; 

ho poi aggiungere un po più proprietà in seguito -

objOpts.option4 = 'Option4' 
objOpts.option5 = 'Option5' 

ho poi fatto con le due proprietà create ultimi ('Opzione4' & ' Opzione 5 ') e voglio cancellare/cancellare entrambi.

Attualmente lo farei in questo modo -

delete objOpts.option4 
delete objOpts.option5 

C'è un altro modo per andare a fare questo? Immagina di aver aggiunto altre 5 proprietà e necessario per cancellare/eliminare tutte quelle che sarebbero cinque righe di codice di eliminazione quasi identico

+1

'var extraOpts = [ 'Opzione4', 'Option5', 'Option6', 'option7', 'Option8' ]; for (index in extraOpts) {delete objOpts [extraOpts [index]]; } ' – scragar

+0

Ancora meglio ... ' var extraOpts = {}; extraOpts.options = ['option4', 'option5', 'option6', 'option7', 'option8']; elimina extraOpts.options; console.log (extraOpts.options); ' –

risposta

7

Sono sicuro che stai cercando di aggiungere proprietà personalizzate a un oggetto.

Un modo più semplice che vorrei suggerire è attraverso la creazione di una struttura sub:

objOpts.custom.option4 = 'Option4' 
objOpts.custom.option5 = 'Option5' 

questo modo si potrebbe delete objOpts.custom e ottiene fatto con esso. Nota che dopo questo passaggio dovresti ricreare objOpts.custom = {}.

Inoltre, questo modo si sentirebbe anche più vicino a OOP, dal momento che le proprietà pubbliche sarebbero facilmente distinguibili da quelle private.

Se si stanno cominciando con l'eliminazione di oggetti in JavaScript, mi piacerebbe puntare a un articolo eccellente scritto sul tema: http://perfectionkills.com/understanding-delete/

Si potrebbe giocare con le proprietà di Meta, che consentono di proteggere oggetti di l'eliminazione ecc (per creare un flusso ancora meglio di codifica per il vostro caso)

EDIT:

mi piacerebbe aggiungere che invece di cancellare e ricreare la proprietà, si potrebbe semplicemente dire objOpts.custom = {} WHI ch rilascerebbe option4 e option5 dalla memoria (eventualmente tramite Garbage Collection).

7

Un modo è creare una funzione separata che assuma l'oggetto e le proprietà come argomento.

Js fiddle example

Codice anche al di sotto:

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); 
17

C'è una semplice correzione utilizzando il lodash biblioteca.

La funzione _.omit accetta l'oggetto e un array di chiavi che si desidera rimuovere e restituisce un nuovo oggetto con tutte le proprietà dell'oggetto originale, ad eccezione di quelle menzionate nell'array.

Questo è un modo pulito per rimuovere le chiavi mentre usando questo si ottiene un nuovo oggetto e l'oggetto originale rimane intatto.Questo evita il problema della mutazione in cui se rimuoviamo le chiavi nell'oggetto originale tutte le altre parti del codice che usano quell'oggetto potrebbero avere la tendenza a rompere o introdurre bug nel codice.

Esempio

var obj = {x:1, y:2, z:3}; 
var result = _.omit(obj, ['x','y']); 
console.log(result); 

//Output 
result = {z:3}; 

link per la documentazione dello stesso Click Here

-1
var extraOpts = {} 
extraOpts.options = ['option4','option5','option6','option7','option8'] 
delete extraOpts.options 
console.log(extraOpts.options)