我有一组键值对,其中每个键都有另一个恒定长度的数组(即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);
谢谢。
答案 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'