在 JavaScript 数组中按值获取索引

get index by value in javascript array

本文关键字:获取 索引 JavaScript 数组      更新时间:2023-09-26

阅读打字稿中的"枚举",我看到这段代码编译成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

而且,如果我在第一行将季节更改为 {} 空 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. 通过索引获取其文本(后四个属性)

看起来有人只是想让季节成为一张双向地图。

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

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

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

如果我在第一行将季节更改为 {} 空 objext,这也有效并且有意义

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

Season = [];

而不是

Season = {};

当实际上以下打字稿:

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 = {}.所以这对你来说应该是有意义的。

附注:

不是您的问题,但是,如果您对此处涵盖Season[Season["Spring"] = 0] = "Spring";感到好奇。