如何读取javascript枚举值
我有下面的代码,我试图通过int来获取值如何读取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
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,但这一解释令人惊讶