如何读取javascript枚举值

如何读取javascript枚举值,javascript,Javascript,我有下面的代码,我试图通过int来获取值 const fruit = Object.freeze({ Apple: 0, Banana: 1, Cherry: 2}); const myFruit = 1; alert(fruit[myFruit]);//undefined alert(fruit(myFruit));//not a function (obviously) 我希望警报提供水果的名称,因此在本例中,请向香蕉发出警报,因为它是1 这可能吗?我没有使用任何框架,所以请不要使用J

我有下面的代码,我试图通过int来获取值

const fruit = Object.freeze({ Apple: 0, Banana: 1, Cherry: 2});
const myFruit = 1;

alert(fruit[myFruit]);//undefined

alert(fruit(myFruit));//not a function (obviously)
我希望警报提供水果的名称,因此在本例中,请向香蕉发出警报,因为它是1

这可能吗?我没有使用任何框架,所以请不要使用JQuery/Angular/React等,只使用Javascript

我是否必须循环查找匹配项,因为以下操作也不起作用:

alert(fruit.length);

您应该使用键而不是值:

 fruit["Banana"]
要在对象中执行搜索,您可以这样处理:

const fruit=Object.freeze({
苹果:0,
香蕉:1,
樱桃:2
});
常数myFruit=1;
log(“未定义的预期返回=>”,fruit[1]);
log(“预期返回1=>”,水果[“香蕉]);
//搜索
Object.keys(水果).forEach(el=>{
if(水果[el]==我的水果)
控制台日志(el)
})
我是否必须循环查找匹配项

对。对象提供按特性名称而不是按特性值的查找。例如:

const fruitName = Object.keys(fruit).find(name => fruit[name] === myFruit);
实例:

constfruit=Object.freeze({苹果:0,香蕉:1,樱桃:2});
常数myFruit=1;
const fruitName=Object.keys(fruit.find)(name=>fruit[name]==myFruit);

console.log(文件名)您好,请尝试以下操作:

const fruit = Object.freeze({
  Apple: 0,
  Banana: 1,
  Cherry: 2
});
const myFruit = 1;

Object.keys(fruit).forEach((name) => {if(fruit[name] === myFruit) alert(name)})

typescript就是这样处理的。创建一个对象,将
Apple
键指向
0
并将
0
返回到
Apple
。所以,它是双向的。这样,您就不必每次循环对象的键并使用数字返回键

constfruit={};
水果[水果[“苹果”]=0]=“苹果”;
水果[水果[“香蕉”]=1]=“香蕉”;
水果[水果[“樱桃”]=2]=“樱桃”;
控制台.日志(水果.香蕉)

log(fruit[2])
JavaScript本身没有枚举,也没有通过值访问对象的属性名来读取对象属性名的明显方式。然而,如果您想让代码看起来有点滑稽,您可以尝试做TypeScript在将枚举编译成JavaScript对象时所做的事情

// TypeScript code…
enum Fruits {
    Apple, Banana
}

// … compiles to this JavaScript.
var Fruits;
(function (Fruits) {
    Fruits[Fruits["Apple"] = 0] = "Apple";
    Fruits[Fruits["Banana"] = 1] = "Banana";
})(Fruits || (Fruits = {}));

它基本上同时为其值指定一个键,然后将该值生成一个键,该键将保存原始键的值。这样,您就可以访问此地图并获得所需的名称

const myFruit = 1
Fruit[myFruit] // => "Banana"
在实现方面,您可以使用类似的方法来避免机器生成代码的“肮脏”

function createEnum(enumeration) {
  const result = Object
    .entries(enumeration)
    .reduce((result, [key, value]) => {
      result[result[key] = value] = key
      return result
    }, {})
  return Object.freeze(result)
}

const fruits = createEnum({Apple: 0, Banana: 1})

fruits[1] // => "Banana"

什么是
计划
?试试
alert(fruit.Apple)
。对象属性集提供了从属性名称(字符串)到属性值(任何内容)的单向映射。属性没有任何应该被认为是“有用”的排序;无论以何种顺序,映射仍然以完全相同的方式保持。抱歉@pointy,updated如果必须通过索引访问项,则正确的数据类型可能是数组而不是对象。const fruit=Object.freeze(['Apple','Banana','Cherry']);常数myFruit=1;console.log(水果[我的水果])//未定义的
获取属性名称数组,然后使用array.prototype.find查找第一个具有myFruit匹配值的属性。
很抱歉,我只能给出1 x+1,但这一解释令人惊讶