我看到很多帖子询问如何映射(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
答案 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...in,Object.keys,forEach,for...of,{{ 3}} ...
像这样,您需要将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
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;
}
Array.from(p).map( ([key, value]) => value * value )
这些示例摘自您可能感兴趣的以下来源: