javascript - 对于没有值的数组,Arr.map 与 Array.from 不同

标签 javascript

我一直假设 Array.from行为与 Array.map 相同为数组。但似乎对于没有初始值的数组,它们是完全不同的。

arr = new Array(5); 
range = Array.from(arr, (v,idx) => idx); // [0,1,2,3,4]
new_arr = arr.map((v, idx) => {return idx;}); // [undefined, undefined,undefined, undefined,undefined]

所以Array.from仍然能够获得索引,而 arr.map这里只是跳过所有值,实际上它从不调用回调函数。

JavaScript 如何处理没有初始值的数组?

最佳答案

new Array(5)创建一个 sparse array ,这是一个带有 length 的数组的 5但实际上没有条目 - 元素 0-4 不仅仅是 undefined ,它们实际上是不存在的。 (0 in arr === false)
你在上面写map的结果是 [undefined, undefined, ...]但实际上它是另一个没有元素的稀疏数组。在 Chrome Devtools 中,您会看到 [empty × 5]反而。Array.from具体的目的是用类似数组的东西创建一个规则数组。它基本上检查 length属性并根据 [0] 返回的任何内容创建一个新数组, [1] , ..., [length - 1] .因此,它将稀疏数组变成了 5x undefined 的密集数组。在其中,您的回调被称为元素 0-4。Array.prototype.map但是,只需遍历数组中的(现有!)元素并返回一个带有映射值的新数组。请注意,稀疏数组没有元素,因此永远不会调用您的回调,并且返回的数组看起来与以前相同。

关于javascript - 对于没有值的数组,Arr.map 与 Array.from 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60584217/

相关文章:

javascript - 用于在 Javascript 中替换具有一种标记类型的字符串的正则表达式

javascript - d3.js 的饼图转换图中的输入数据不显示标签名称

javascript - jQuery 动画按比例展开

javascript - 引用错误 : customElements is not defined

javascript - jqGrid - 在编辑时检测后端 HTTP 响应代码

javascript - URL 中带有 user@ 的几个请求导致来自 Google AdSense 的 "Policy breach notice"

javascript - 比较数组并相加?

javascript - 火力地堡 : recent login requested

javascript - Webpack:不同类型的多个入口点(JS、HTML、LESS……)

php - 在 PHP 后端使用 Cappuccino JS 框架