【发布时间】:2014-02-27 03:30:40
【问题描述】:
我有一个包含许多唯一字符串的数组,我希望尽可能不循环,从中创建一个映射对象,其中每个元素的键是唯一字符串,值默认为任意设置.
有没有一种方法可以在一行中做到这一点而无需循环? IE。我想从
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
};
【问题讨论】:
-
您在下面的评论中提到您正在寻求优化此性能以提高性能,因为此代码将重复编码。首先,您不能将其缓存在更高范围的变量中吗?除非每次颜色列表或 VAL 都不同,否则没有理由不能。第二 - 你确定性能有问题吗?大多数不同的技术(for loop、reduce、forEach、underscore)具有非常相似的性能,不太可能成为您的瓶颈。微优化前的配置文件!
-
@GeorgeMauer:是的,我会跟进。我想我在这里的潜在兴趣是是否有一种方法不是 O(n) - 听起来好像没有。
-
JS 几乎不会完全遵循你在 CS 中学到的那些 ptime 预测。根据您的需要,Object.create() 可能会快很多。
-
我认为理论上对无序数组的每个元素的任何操作都不可能小于 O(n)。但是,O(n) 不是大多数算法试图达到的确切情况吗?一旦你是 O(n),你基本上就处于“不是问题”的领域。
-
确实如此,在 V8 或 TraceMonkey 中做一些重复性的基准测试,你就会明白我的意思了。如果例程已编译且未在运行时优化,则适用旧规则。
标签: javascript arrays string map