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

时间:2019-03-22 02:08:44

标签: 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

定义不同的定义

1 个答案:

答案 0 :(得分:0)

Map的概念与Object类似,但与Array相似。

来自docs

  

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

因此,您可以注意到Object没有属性顺序,而Map却没有属性顺序。

您是否注意到Map的键值对如下:

[[ 1, 'one' ],[ 2, 'two' ]]

您可以在文档上查看Map vs Object上的区别。

您可以看到以下示例以了解为什么将其与Object进行比较:

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

您发现它不像数组。但是像一个物体。因此,您可以尝试使用Object进行尝试。您不能直接将.map()Object一起使用,但需要使用for...inObject.keysforEachfor...of,{{ 3}} ...

像这样,您需要将Map用于:

Object.entries

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

for...of

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;
}

forEach

Array.from(p).map( ([key, value]) => value * value )

这些示例摘自您可能感兴趣的以下来源:

Array.from

Array vs Set vs Map

How to map a map