Kha*_*nna 5 javascript arrays ecmascript-6 es6-map
我最近将一些使用常规对象作为映射的代码转换为新的 es6Map
类。我很快就遇到了一个问题,虽然Map
该类包含一个forEach
like Array
,但它不包含一个some
方法以及许多其他Array.prototype
方法。
为了提供一些上下文,带有常规 JS 对象的原始代码如下所示:
var map = {
entry1: 'test',
entry2: 'test2'
};
Object.keys(map).some(key => {
var value = map[key];
// Do something...found a match
return true;
});
Run Code Online (Sandbox Code Playgroud)
的Map
类不包括一个entries
方法,但遗憾的是此返回一个Iterator
对象。这也不包括访问这些Array.prototype
方法的任何简单方法。
我很好奇是否有一种干净的方法可以做到这一点,或者我是否在咆哮错误的树。
使用Map#values
获取值的迭代器,使用spread syntax
or Array#from
(样式问题)将迭代器转换为数组:
const map = new Map([['a', 1], ['b', 2], ['c', 3]]);
const result = [...map.values()].some((value) => value > 2);
console.log(result);
Run Code Online (Sandbox Code Playgroud)
如@Paulpro 评论中所述,您可以使用相同的方法来迭代Map#entries
, 和Map#keys
. 例如,Array#reduce
用于将 Map 转换为对象。作为Array#from
调用,Map#entries
我们不需要显式调用它:
const map = new Map([['a', 1], ['b', 2], ['c', 3]]);
const result = Array.from(map.entries()).reduce((obj, [key, value]) => {
obj[key] = value;
return obj;
}, {});
console.log(result);
Run Code Online (Sandbox Code Playgroud)