J'ai un objet avec des paires nom-valeur. Comment puis-je cibler et supprimer une paire nom-valeur spécifique si je n'ai que la valeur?

{
  1: 'foo',
  2: 'boo',
  3: 'goo',
  4: 'moo'
}

Veuillez noter que c'est important - tout ce que j'ai est «boo», et il est possible que cette valeur change le nombre à l'avenir. J'ai besoin de cibler la chaîne exacte.

-3
Edward Kluczkowski 16 avril 2018 à 00:54

5 réponses

Meilleure réponse

En fait, je l'ai simplifié un peu:

const newObj = map(myObj, value => value !== valueToRemove)

Alors voilà.

0
Kutyel 4 mai 2018 à 11:07

Vous pouvez utiliser pour ... de pour itérer les entrées de l'objet et créez un nouvel objet à partir des entrées qui n'ont pas la valeur spécifiée:

const obj = {
  1: 'foo',
  2: 'boo',
  3: 'goo',
  4: 'moo'
}

const omitKeyByValue = (val) => {
  const r = {};
  
  for(const [k, v] of Object.entries(obj)) {
    if(obj[k] !== val) r[k] = v;
  }

  return r;
};


console.log(omitKeyByValue('boo'));
0
Ori Drori 16 avril 2018 à 04:59

En utilisant cette réponse et un {{X0 }}.

Si vous souhaitez supprimer plusieurs propriétés avec cette valeur, supprimez le return obj; de l'intérieur du for.

var valueToRemove = 'boo';
var myObj = {
  1: 'foo',
  2: 'boo',
  3: 'goo',
  4: 'moo'
};

console.log(myObj);
removePropertyByValue(myObj, valueToRemove)
console.log(myObj);

function removePropertyByValue(obj, value) {
  for(var prop in obj) {
    if(obj[prop] == value) {
      delete obj[prop];
      return obj;
    }
  }
  return obj;
}
0
raul.vila 15 avril 2018 à 21:59

Solution fonctionnelle et immuable:

const cleanObj = (obj, val) => 
  Object.entries(obj)
    .filter(([key, value]) => value !== val)
    .reduce((o, [k, v]) => ({ ...o, [k]: v }), {})
0
Kutyel 15 avril 2018 à 21:58