为什么我不能使用 Array.from 从 Map 的键或值创建数组?

问题描述 投票:0回答:1

从我一直在阅读的文档中,以下内容应该从

Array
的键创建
Map

var m = new Map();
m.set("a", 1);
m.set("b", 2);

var arr1 = Array.from(m.keys());
var arr2 = Array.from(m.values());

console.log(arr1.length);
console.log(arr2.length);

我希望为两个数组打印

2
,但实际上两个数组都是空的并且它打印
0
。什么给出?

编辑:当我在 Javascript 控制台中执行上述代码时,此问题似乎发生在特定网页上。如果我在其他页面上执行它,它会按预期工作。

编辑 2:经过进一步调查,似乎有问题的页面包含prototype.js v1.6.1,这在某种程度上导致

Array.from
损坏。

javascript arrays maps
1个回答
0
投票

这似乎是由

prototype.js
中的已知错误引起的。请参阅 此 GitHub 问题“Native Array.from 被 $A 覆盖,它无法处理本机函数 #338 使用的所有情况”

问题摘录:

从这两个函数的定义来看: Array.from() 方法从类似数组或可迭代对象创建一个新的 Array 实例。 但是,$A 函数仅接受类似数组的集合(任何具有数字索引的集合)。 因此 $A 无法处理没有数字索引的其他可迭代对象,例如 MapIterator。

当 $A 尝试通过读取某些本机可迭代对象(例如 MapIterator)中存在的 iterable.length 来创建新数组时,结果将返回一个长度为 0 的数组。

© www.soinside.com 2019 - 2024. All rights reserved.