2015-09-12 8 views
6

In JavaScript, posso cancellare la chiave di un oggetto conJavaScript - Funzione incorporata per eliminare più chiavi in ​​un oggetto?

delete myObject[myKey];

A volte, ho bisogno di eliminare alcuni tasti abbastanza, ma non tutti i valori nella chiave padre che incapsulano le chiavi che voglio eliminare .

Esiste un modo efficace per eliminare più chiavi utilizzando una sola riga? Qualcosa che assomiglia:

multiDelete myObject[keyOne, keyTwo, keyThree];

+0

efficiente da quale prospettiva? L'uso di 'delete' è già inefficiente al primo posto. – zerkms

+0

* ma non tutti i valori nella chiave principale che incapsulano i tasti che voglio cancellare * Potresti chiarire? Cosa intendi per "chiave genitore" o "incapsula i tasti"? –

risposta

2

Non esiste una funzione built-in, ma un modo che si possa fare è quello di aggiungere il metodo multidelete al prototipo oggetto. Forse è un po 'eccessivo, ma potresti trovarlo utile.

if (!('multidelete' in Object.prototype)) { 
    Object.defineProperty(Object.prototype, 'multidelete', { 
     value: function() { 
      for (var i = 0; i < arguments.length; i++) { 
       delete this[arguments[i]]; 
      } 
     } 
    }); 
} 

var obj = { a: 1, b: 2, c: 3, d: 4, e: 5 }; 

obj.multidelete('c', 'e'); // { a: 1, b: 2, d: 4 }; 

DEMO

+0

Se si analizzano gli argomenti in questo modo, non è necessario suddividerlo prima. Inoltre, 'enumerable' e' configureable' sono impostati su 'false' e ​​non è necessario specificarli esplicitamente. –

10

Ecco una battuta simile a quello che si sta richiedendo.

var obj = {a: 1, b: 2, c: 3, d: 4, e: 5 }; 

['c', 'e'].forEach(e => delete obj[e]); 

// obj is now {a:1, b:2, d:4} 
2

Non v'è costruito in funzione js per eliminare ancora più chiavi, è possibile utilizzare qualsiasi libreria per questo, come underscore.js per fare questo.

_.omit({name: 'moe', age: 50, userid: 'moe1'}, 'userid'); 
=> {name: 'moe', age: 50} 

//or you can use function to filter keys 

_.omit({name: 'moe', age: 50, userid: 'moe1'}, function(value, key, object){ 
    return _.isNumber(value); 
}); 
=> {name: 'moe', userid: 'moe1'} 
Problemi correlati