Tum*_*ums 4 javascript arrays dictionary
我有一个键值对数组,其中每个键都有一个固定长度(即 2)的另一个数组作为值。如何将整个数组添加到 aMap()
而不只是Map.set(key, value)
为每一对做?
我知道在创建Map()
实例时,我可以将像数组一样的可迭代对象传递给它,例如:let x = new Map(arr);
但根据此处的文档,IE 11 不支持此方法。那么,谁能帮我解决一个替代实现。
归根结底,我只想能够使用字符串键访问这两个值。如果有另一种方法可以实现,请指导我。
这是示例:
我创建了一个键值映射数组,如下所示:
let arr = [
['ar', ['cl', 'bl']],
['bs', ['kl', 'ml']],
['cs', ['rk', 'uk']],
['da', ['mk', 'ak']]
];
let map = new Map(arr); // This isn't working.
Run Code Online (Sandbox Code Playgroud)
谢谢你。
如果您需要支持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);
Run Code Online (Sandbox Code Playgroud)
或 ES2015 方法(不适用于 IE11):
const map = arr.reduce((obj, item) => ({
...obj,
[item[0]]: item[1],
}), {});
Run Code Online (Sandbox Code Playgroud)
如果您想通过字符串键访问子数组,则无论如何都必须将其从数组转换。
如果您想使用Map
,那么(除了修复数组定义中的拼写错误)您将通过 Map.prototype.get 函数提取内容:
var map = new Map(arr);
console.log(map.get('bs'));
Run Code Online (Sandbox Code Playgroud)
如果您不想创建新对象,另一种方法可能是使用 Array.filter:
arr.filter(function (item) { return item[0] === 'ar' })[0][1];
arr.filter((item) => item[0] === 'ar')[0][1]; // ES2015
Run Code Online (Sandbox Code Playgroud)
(可能包装在一个函数中)