2017-10-03 2 views
1

J'ai un objet et je souhaite supprimer toutes les valeurs sauf celle qui correspond à une clé particulière. Par exemple, je pourrais le faire:JavaScript: supprime toutes les clés, sauf une, d'un objet

function remove(obj, key) { 
    var value = obj[key] 
    var ret = {} 
    ret[key] = obj[key] 
    obj = ret 
} 

Ou je pourrais itérer:

for (var k in obj) { 
    if (k != key) { 
    delete obj[k] 
    } 
} 

Mais je me demande s'il y a une meilleure façon. La création d'une variable temporaire et l'itération sur l'ensemble de l'objet semblent toutes deux inutiles. Ma première tentative a été:

obj = { 
    key: obj[key] 
} 

Mais qui a abouti à un objet avec une clé de key.

+3

Essayez '[key]: [key] obj'. Vous avez besoin d'une propriété calculée, pas d'une propriété littérale ici. – Xufox

+1

@saniales c'est ce que j'ai essayé initialement et cela n'a pas fonctionné. lire la fin de la question – ewok

+0

est la clé d'une variable? – gurvinder372

Répondre

0

Vous pouvez en effet réaliser ce que vous avez décrit sans utiliser de variables temporaires.

function remove(obj, key) { 
    return Object.assign({}, { [key] : obj[key]}); 
} 
0

Vous pouvez simplement créer un nouvel objet avec [clé]: obj [clé].

var obj = { 
 
"a":1, 
 
"b":2 
 
}; 
 
var key = "a"; 
 

 
function filterByKey(object, key) { 
 
    return Object.create({[key]:obj[key]}); 
 
} 
 
function filterByKey2(object, key) { 
 
    return {[key]:obj[key]}; 
 
} 
 
console.log(filterByKey(obj, key)); 
 
console.log(filterByKey2(obj, key));