web-dev-qa-db-fra.com

Définir toutes les clés d'objet sur false

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?

11
chefcurry7

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 }
16
Jonathan Eunice

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

25
nnnnnn

Si vous n'utilisez pas ES6, voici son équivalent ES5.

Object.keys(filter).forEach(function(key, value) {
    return filter[key] = false;
})
7
Splurtcake

hasOwnProperty doit être utilisé

`` `

for(var i in your_object) {
  if (Object.hasOwnProperty.call(your_object, i)) {
    your_object[i] = false;
  }
}

`` `

1
Alex Shwarc

Une petite ligne de code compatible avec tous les navigateurs:

for(var i in your_object) your_object[i] = false;
1
Pinguto

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;
              }, {});
1
Avinash Srivastava