Disons que j'ai un objet
filter: {
"ID": false,
"Name": true,
"Role": false,
"Sector": true,
"Code": false
}
Je veux définir toutes les clés sur false (pour les réinitialiser). Quelle est la meilleure façon de faire cela, j'aimerais éviter de boucler avec foreach
et d'autres choses. Une belle ligne?
Utiliser lodash, mapValues
est une manière élégante et sans boucle:
filter = {
"ID": false,
"Name": true,
"Role": false,
"Sector": true,
"Code": false
};
filter = _.mapValues(filter, () => false);
Si vous voulez faire cela avec Underscore.js, il existe un équivalent, mais avec un nom légèrement différent:
filter = _.mapObject(filter, () => false);
Dans les deux cas, la valeur de filter
sera définie sur:
{ ID: false,
Name: false,
Role: false,
Sector: false,
Code: false }
Eh bien voici un one-liner avec Vanilla JS:
Object.keys(filter).forEach(v => filter[v] = false)
Il utilise une boucle implicite avec la méthode .forEach()
, mais vous devez boucler d'une manière ou d'une autre (sauf si vous réinitialisez en remplaçant l'objet entier par un littéral d'objet par défaut codé en dur).
Si vous n'utilisez pas ES6, voici son équivalent ES5.
Object.keys(filter).forEach(function(key, value) {
return filter[key] = false;
})
hasOwnProperty doit être utilisé
`` `
for(var i in your_object) {
if (Object.hasOwnProperty.call(your_object, i)) {
your_object[i] = false;
}
}
`` `
Une petite ligne de code compatible avec tous les navigateurs:
for(var i in your_object) your_object[i] = false;
Si vous avez affaire à des variables de "portée", cela pourrait être une meilleure solution.
Object.keys(filter).reduce(function(accObj, parseObj) {
accObj[parseObj] = false;
return accObj;
}, {});