在Javascript中从2个值和键数组构建Map

时间:2016-06-03 19:39:01

标签: javascript arrays dictionary

我想知道是否有一种简单的方法可以从一组键和一组值构建一个Map。 例如,如果我有2个数组

var keys = [0, 4, 2, 3, 1];
var values = ["first", "second", "third", "fourth", "fifth"];

我打算获得这张地图:

{
  0 => 'first',
  4 => 'second',
  2 => 'third',
  3 => 'fourth',
  1 => 'fifth' }

当然,我正在寻找比以下更快的东西:

var myMap = new Map();
for (var i = 0 ; i < keys.length; i++)
myMap.set(keys[i], values[i]);

因为它的O(n)和我寻求O(1)

3 个答案:

答案 0 :(得分:0)

您正在寻找Object.assign(不适用于每个用户代理)。

  

Object.assign() 方法用于将所有可枚举的自有属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

&#13;
&#13;
var sum = ["first", "second", "third", "fourth", "fifth"],
    obj = Object.assign({}, sum);

console.log(obj);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

使用Javascript ES6,无法从一组键和值构建Map,其运行时间复杂度高于 O(n)

如果你有一个组合的键值数组,你可以将它作为第一个参数传递给Map()构造函数:

var map = new Map([[1, 'first'], [2, 'second'], …]);

对于键和值使用两个单独的数组,然而,每个for循环逐个添加它们仍然是您最快的选择。

答案 2 :(得分:-1)

嗯,你总是可以在O(1)中做这样的事情;在这种情况下,您不会逐个复制属性并获取对象。

&#13;
&#13;
var values = ["first", "second", "third", "fourth", "fifth"],
       obj = Object.create(values);
console.log(typeof(obj));
console.log(Array.isArray(obj));
console.log(obj[2]);
&#13;
&#13;
&#13;