我最近将一些使用常规对象作为 map 的代码转换为新的 es6 Map
类。我很快遇到了一个问题,因为 Map
类包含一个 forEach
与 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;
});
Map
类确实包含一个 entries
方法,但遗憾的是这会返回一个 Iterator
目的。这也不包括访问 Array.prototype
方法的任何简单方法。
我很好奇是否有一种干净的方法可以做到这一点,或者我是否找错了树。
最佳答案
使用 Map#values
获取值的迭代器,并使用 spread syntax
或 Array#from
(样式问题)将迭代器转换为数组:
const map = new Map([['a', 1], ['b', 2], ['c', 3]]);
const result = [...map.values()].some((value) => value > 2);
console.log(result);
如 @Paulpro comment 中所述,您可以使用相同的方法迭代 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);
关于javascript - 在 es6 map 上调用 `Array.prototype.some()` 的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41538424/