javascript - 在 es6 map 上调用 `Array.prototype.some()` 的更好方法

标签 javascript arrays ecmascript-6 es6-map

我最近将一些使用常规对象作为 map 的代码转换为新的 es6 Map 类。我很快遇到了一个问题,因为 Map 类包含一个 forEachArray 一样,它不包含 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 syntaxArray#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#entriesMap#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/

相关文章:

Javascript 根据类在选择框中选择选项

java - 如何在java中用传入的字符串命名数组?

webpack - Vue 路由器 - 无法延迟加载组件 - 意外 token

javascript - ES6 类 'this' 用于非类方法

javascript - 如何使用 Grunt + Browserify + Reactify 转换 React ES6 类?

javascript - 聊天应用可滚动的 div 或 Iframe

Javascript/jQuery 在计时器后点击

javascript - 将 paper.js 集成到 angular.js 中

arrays - 将值分配给 R 中数组的特定维度

java - Android:从 JSON 动态获取 JSON 数组键名