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
的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...in、Object.keys、forEach、for...of、Object.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)
Array.from(p).map( ([key, value]) => value * value )
Run Code Online (Sandbox Code Playgroud)
这些示例摘自以下来源,您可能有兴趣进一步查看:
| 归档时间: |
|
| 查看次数: |
742 次 |
| 最近记录: |