如何在JavaScript中向Map添加键值对数组?

时间:2018-02-02 15:07:03

标签: javascript arrays dictionary

我有一组键值对,其中每个键都有另一个恒定长度的数组(即2)作为值。如何将整个数组添加到list, 145540, 145560, 145566,145592,157247,166927 (= all possible ids in the data) list1, 1, 1, 1, 0, 1, 0 list2, 0, 0, 0, 0, 0, 1 list3, 0, 1, 1, 1, 0, 0 ,而不必为每对Map()执行此操作?

我知道在创建Map.set(key, value)实例时,我可以将类似数组的迭代传递给它:Map()但是根据文档here,IE 11不支持这种情况。那么,任何人都可以通过其他实施帮助我。

在一天结束时,我只希望能够使用字符串键访问这两个值。如果还有其他方法可以实施,请指导我。

以下是示例:

我创建了一个键值映射数组,如下所示:

let x = new Map(arr);

谢谢。

2 个答案:

答案 0 :(得分:4)

如果您需要支持未实现Map的浏览器,只需使用普通对象,其中第一个数组项将是键和&第二个(子数组)值:

var arr = [
        ['ar', ['cl', 'bl']],
        ['bs', ['kl', 'ml']],
        ['cs', ['rk', 'uk']],
        ['da', ['mk', 'ak']]
    ];

var map = arr.reduce(function (obj, item) {
    obj[item[0]] = item[1];
    return obj;
}, {});

console.log(map['ar'], map.bs);

或ES2015方法(在IE11中不起作用):

const map = arr.reduce((obj, item) => ({
    ...obj,
    [item[0]]: item[1],
}), {});

如果您想通过字符串键访问子数组,则无论如何都必须从数组转换它。

如果你想使用Map,那么(除了修复数组定义中的拼写错误外)你将通过Map.prototype.get函数提取内容:

var map = new Map(arr);
console.log(map.get('bs'));

如果您不想创建新对象,另一种方法可能是使用Array.filter:

arr.filter(function (item) { return item[0] === 'ar' })[0][1];
arr.filter((item) => item[0] === 'ar')[0][1]; // ES2015

(可能包含在函数中)

答案 1 :(得分:1)

您可以使用对象

let obj = 
{ ar:['cl', 'bl'],
  bs:['kl', 'ml'],
  cs:['rk', 'uk'],
  da:['mk', 'ak']
};
console.log(obj['bs'][1]); // displays 'ml'