繁体   English   中英

在javascript数组中按值获取索引

[英]get index by value in javascript array

阅读打字稿中的'enum',我看到这段代码编译成了javascript。

var Season = [];
Season[Season["Spring"] = 0] = "Spring";
Season[Season["Summer"] = 1] = "Summer";
Season[Season["Fall"] = 2] = "Fall";
Season[Season["Winter"] = 3] = "Winter";

console.log(Season.Spring); // 0
console.log(Season[0]); // Spring

并且,如果我在第一行将Season改为{}空objext,这也有效,这是有道理的。 我不知道发生了什么事。 这是什么?

编辑:是的。 这不是编译器生成的。 编译器使用空对象。 但是,如果我将其更改为空数组。 它仍然有效。 我的问题是为什么数组也很好。 起初我的问题包括两个版本,但有人编辑了问题并删除了对象使用版本。

这个:

Season[Season["Spring"] = 0] = "Spring";
Season[Season["Summer"] = 1] = "Summer";
Season[Season["Fall"] = 2] = "Fall";
Season[Season["Winter"] = 3] = "Winter";`

在Season对象中创建八个属性:

Season["Spring"] = 0;
Season["Summer"] = 1;
Season["Fall"] = 2;
Season["Winter"] = 3;
Season[0] = "Spring";
Season[1] = "Summer";
Season[2] = "Fall";
Season[3] = "Winter";

在那个季节之后可以要求:

  1. 按文字获取其索引(前四个属性)
  2. 通过索引获取其文本(后四个属性)

看起来有人正试图让Season成为双向地图。

换句话说,您可以按数字索引或字符串值查找项目。

var season1     = Season[1];        // season1 == 'Summer'
var summerIndex = Season['Summer']; // summerIndex == 1

如果我在第一行将Season改为{}空objext,这也有效,这是有道理的

我有一些关于枚举的文档 ,但你的问题是为什么:

Season = [];

代替

Season = {};

实际上是以下TypeScript:

enum Season {
    Spring,
    Summer,
    Fall,
    Winter
}

生成JavaScript

var Season;
(function (Season) {
    Season[Season["Spring"] = 0] = "Spring";
    Season[Season["Summer"] = 1] = "Summer";
    Season[Season["Fall"] = 2] = "Fall";
    Season[Season["Winter"] = 3] = "Winter";
})(Season || (Season = {}));

你可以看到Season = {} 所以它应该对你有意义。

PS:

不是你的问题但是,如果你对Season[Season["Spring"] = 0] = "Spring";感到好奇Season[Season["Spring"] = 0] = "Spring"; 这里有报道

如果你将代码块中的第一个语句改为var Season = [];我将解答你为什么它仍然有效的问题var Season = []; 所以Season是一个数组而不是一个空对象。 数组也是对象,您可以在JavaScript中设置您喜欢的任何属性,甚至是数组(只要您不通过Object.freeze运行该对象)。 因此,表达式Season["Spring"] = 0只是在Season对象上设置一个名为“Spring”的属性,您可以使用Season["Spring"]Season.SpringSeason.Spring ,就像在任何其他对象上一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM