簡體   English   中英

如何從Javascript中的字符串列表創建地圖(對象)

[英]How to create a map (object) from list of strings in Javascript

我有許多唯一字符串的數組,我希望盡可能不循環就從中創建一個地圖對象,其中每個元素的鍵是唯一字符串,並且該值默認為任意設置。

有沒有辦法我可以在一行中做到這一點而無需循環? 即我想從

var colours = [ "Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Violet" ];

var colourMap = {
    "Red":    VAL,
    "Orange": VAL,
    "Yellow": VAL,
    "Green":  VAL,
    "Blue":   VAL,
    "Indigo": VAL,
    "Violet": VAL
};

如果您真的想完全跳過循環(包括map函數),那么可以這樣做:

JSON.parse('{"'+colours.join('":"VAL", "')+'":"VAL"}');

這將構建一個JSON字符串,然后對其進行解析。

但是,我不會使用此功能。 它很丑陋,效率低下,難以維護,並在“幕后”使用循環,通常是不好的形式。 (我什至不會用eval代替eval === evil )。

去像map這樣的東西:

var colours = [ "Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Violet" ];
var colourMap = {};
colours.forEach(function(c){
    colourMap[c] = "VAL";
});

是的,它在colours循環,但是更有效,更容易理解。

關於性能:

在Chrome瀏覽器中, mapreduce執行速度似乎相似reduce速度稍快)。

假設您的瀏覽器要求支持Array.prototype.reduce

colours.reduce(function(obj, c){ 
  obj[c] = "VAL";
  return obj;
}, {})

或者如果您可以混蛋並且使用語法,大多數js開發人員甚至都不知道存在

colours.reduce(function(obj, c){ return (obj[c] = "VAL", obj) }, {})

您可以使用jQuery來做到這一點:

colourMap = $.map(colours, function(e){
  return { e: "VAL" };
});

或使用下划線:

var colourMap = {};
_.each(some_object_array, function(val) {
  colourMap[val] = "VAL";
});

甚至更好(感謝George Mauer):

_.object(_.map(colourMap, function(c) { return [c, "VAL"] }))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM