javascript - 为什么 Array.from() 返回第一个元素未定义?

标签 javascript arrays ecmascript-6

当我做的时候

const arrayLike = { 1:'foo', 2:'bar', length:2 };
Array.from(arrayLike);

我明白了

[ undefined, 'foo' ]

当我这样做

const arrayLike = { 1:'foo', 2:'bar', length:3 };
Array.from(arrayLike)

我明白了

[ undefined, 'foo', 'bar' ]
  • 为什么我在设置长度时看不到 bar
  • 为什么只有当我将长度硬设置为 3 时,我才能看到我的元素?
  • 为什么第一个元素显示为undefined

最佳答案

数组在 JavaScript 中是 0 索引

所有这些问题的答案都非常简单。 Array.from 假设您给它的类数组对象是零索引的。如果不是,您将获得一个零索引的数组,其中包含所有未设置的元素,包括 0 设置为 undefined。所以在你的例子中,

const arrayLike = { 1:'foo', 2:'bar', length:2 };
Array.from(arrayLike);

本质上是一样的,

const arrayLike = { 0:undefined, 1:'foo', 2:'bar', length:2 };
Array.from(arrayLike);

因为长度小于最大元素,它基本上在该点停止迭代,并且假长度起到 chop 的作用。你想要的很可能,

const arrayLike = { 0:'foo', 1:'bar', length:2 };
Array.from(arrayLike);

或者,如果您从索引为 1 的源中获取类数组,请适当设置 length 以免丢失最后一个元素,然后从结果中删除第一个元素(相当于 shift)。

const arrayLike = { 1:'foo', 2:'bar', length:3 };

let arr = Array.from(arrayLike).splice(1);

let arr = Array.from(arrayLike);
arr.shift();


let [, ...arr] = Array.from(arrayLike);

关于javascript - 为什么 Array.from() 返回第一个元素未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45040639/

相关文章:

javascript - jquery/javascript - 解析 url 以查看您是否在某个页面上

c# - javascript中设置的标签文本未在服务器端显示标签文本

python - 在 Numpy Python 中将一维数组 append 到二维数组

java - 连接 2 个数组的输出不符合预期

javascript - Node.js ES6 中的 Promise 何时启动代码?

javascript - 使用ArcGIS绘图工具

javascript - Node 请求模块 - 发送表单数据时遇到问题

arrays - 在 Firebase SWIFT 中查询数组

Javascript Foreach 的日期格式打印相同的日期

javascript - 什么时候需要创建延迟?