在javascript数组中按值获取索引
Posted
技术标签:
【中文标题】在javascript数组中按值获取索引【英文标题】:get index by value in javascript array 【发布时间】:2016-05-06 15:17:47 【问题描述】:阅读 typescript 中的“枚举”,我看到这段代码编译为 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,这也有效,而且很有意义。 不知道怎么回事,听着。 这是什么?
编辑:是的。这不是编译器生成的。编译器使用空对象。但是,如果我将其更改为空数组。它仍然有效。我的问题是为什么数组也很好用。起初我的问题包括两个版本,但有人编辑了问题并删除了对象使用版本。
【问题讨论】:
编译器编写 JavaScript 时会发生这种情况。 其实这不是编译器生成的。看我的回答***.com/a/35075698/390330 数组是对象,因此如果您所做的只是使用方括号表示法分配属性,那么两者的行为完全相同。数组有一个特殊的长度属性,但在其他方面并不特殊(它们继承的属性大多是通用的,可以应用于任何合适的对象)。 @RobG 谢谢,这就是我想知道的。 【参考方案1】:这个:
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";
在那个赛季之后可以申请:
-
通过文本获取其索引(前四个属性)
通过索引获取其文本(后四个属性)
【讨论】:
但是,console.log(Seson.length) // 4 不是说 Season 是数组吗?那么,数组如何才能拥有像对象一样的“Spring”属性呢? @monad98 你问的问题是错误的。那不是编译器生成的 JavaScript:***.com/a/35075698/390330 @monad98 数组也是一个对象,有一些细节:Array.prototype.length
是最后占用的整数索引 + 1。【参考方案2】:
看起来有人只是想让赛季成为一个双向地图。
换句话说,您可以通过数字索引或字符串值来查找项目。
var season1 = Season[1]; // season1 == 'Summer'
var summerIndex = Season['Summer']; // summerIndex == 1
【讨论】:
是的。但这不是操作员所质疑的***.com/a/35075698/390330【参考方案3】:如果您将代码块中的第一条语句更改为 var Season = [];
以使 Season
是一个数组而不是一个空对象,我将解决您的问题,为什么它仍然有效。数组也是对象,你可以在 JavaScript 中对对象设置任何你喜欢的属性,甚至是数组(只要你不通过Object.freeze
运行对象)。所以表达式Season["Spring"] = 0
只是在Season
对象上设置一个名为“Spring”的属性,您可以使用Season["Spring"]
或Season.Spring
访问该属性,就像在任何其他对象上一样。
【讨论】:
【参考方案4】:如果我在第一行将 Season 更改为 empty objext,这也有效并且有意义
我有一些docs about enums,但你的问题是为什么:
Season = [];
代替
Season = ;
实际上是以下 TypeScript:
enum Season
Spring,
Summer,
Fall,
Winter
生成the 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";
that is covered here 感到好奇。
【讨论】:
谢谢~!它对我理解枚举帮助很大以上是关于在javascript数组中按值获取索引的主要内容,如果未能解决你的问题,请参考以下文章
如何在reactjs / javascript中按值对对象数组进行分组