为什么 Map 原型没有 `.map()` 函数?

Mic*_*Mao 6 javascript ecmascript-6

我看到很多帖子询问如何映射(Array.prototype.map)地图。大多数解决方案都是这样做的,Array.from(...)但我想知道的是为什么 Map 本身不支持.map()

也许是一些性能问题,或者我们没有这种用例?

https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/map 也许是地图的定义, The map() method creates a new array with the results of calling a provided function on every element in the calling array.但为此我们可以有不同的定义Map.prototype.map

Bho*_*yar 3

Map构建理念与 类似,Object但不是Array

来自文档

Map 对象保存键值对并记住键的原始插入顺序。

所以,你可以注意到,Object没有属性顺序,而Map有。

您是否注意到,Map具有如下键值对:

[[ 1, 'one' ],[ 2, 'two' ]]
Run Code Online (Sandbox Code Playgroud)

您可以在文档中查看地图与对象之间的差异。

您可以查看此示例以了解为什么将其与以下内容进行比较Object

const map = new Map([[3, 'three'], [2, 'two'], [2, 'four']]);
console.log(map); // returns {3 => "three", 2 => "four"} 
Run Code Online (Sandbox Code Playgroud)

你发现它不像数组。但就像一个物体。所以,你可以尝试一下你所尝试的Object。您不能直接使用.map()with Object,但您需要使用for...inObject.keysforEachfor...ofObject.entries ...

像这样你需要使用Map

为了...的

let iterable = new Map([["a", 1], ["b", 2], ["c", 3]]);

for (let entry of iterable) {
  console.log(entry);
}
// [a, 1]
// [b, 2]
// [c, 3]

for (let [key, value] of iterable) {
  console.log(value);
}
// 1
// 2
// 3
Run Code Online (Sandbox Code Playgroud)

对于每个

const mapMap = function(map, mapFunction){

  const toReturn = [];
  map.forEach(function(value, key){ // be careful to the args order
    toReturn.push(mapFunction(value, key));
  })

  return toReturn;
}
Run Code Online (Sandbox Code Playgroud)

数组.from

Array.from(p).map( ([key, value]) => value * value )
Run Code Online (Sandbox Code Playgroud)

这些示例摘自以下来源,您可能有兴趣进一步查看:

数组、集合、映射

如何绘制地图

ES6 映射与对象:什么以及何时