web-dev-qa-db-fra.com

Javascript - affiche le nom d'une énumération à partir d'une valeur

Est-il possible d'imprimer les valeurs du champ enum en fonction de la valeur int? Par exemple, j'ai l'énumération suivante:

refractiveIndex = {"vacuum": 1, "air": 1.000293, "water": 1.33, "diamond": 2.419};

Si j'ai une valeur, existe-t-il un moyen d'imprimer le nom de l'énum. Par exemple, disons que j'ai une variable définie sur 1 et que je veux imprimer "vacuum", comment puis-je le faire:

var value = 1;
console.log(refractiveIndex(value)); // Should print "vacuum" to console

?

6
Tyler Hilbert

Vous pouvez itérer les clés et tester la valeur de la propriété.

var refractiveIndex = {"vacuum": 1, "air": 1.000293, "water": 1.33, "diamond": 2.419},
    value = 1,
    key;

Object.keys(refractiveIndex).some(function (k) {
    if (refractiveIndex[k] === value) {
        key = k;
        return true;
    }
});
console.log(key);

ES6

var refractiveIndex = {"vacuum": 1, "air": 1.000293, "water": 1.33, "diamond": 2.419},
    value = 1,
    key = Object.keys(refractiveIndex).find(k => refractiveIndex[k] === value);

console.log(key);

10
Nina Scholz

https://jsfiddle.net/1qxp3cf8/

utilisez pour ... of pour parcourir les propriétés de l'objet et vérifiez si la valeur recherchée correspond à celle que vous recherchez.

refractiveIndex = {
  "vacuum": 1,
  "air": 1.000293,
  "water": 1.33,
  "diamond": 2.419
};

var value = 1;
for (prop in refractiveIndex) {
  if (refractiveIndex[prop] == value) {
    console.log(prop);
  }
}

si vous le vouliez comme fonction, vous pourriez l'écrire comme ceci:

function SearchRefractive(myValue) {
    for (prop in refractiveIndex) {
      if (refractiveIndex[prop] == myValue) {
        return prop;
      }
    }
}
var value = 1;
SearchRefractive(value);
1
zfrisch