簡體   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