从我一直在阅读的文档中,以下内容应该从
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
损坏。
这似乎是由
prototype.js
中的已知错误引起的。请参阅 此 GitHub 问题“Native Array.from 被 $A 覆盖,它无法处理本机函数 #338 使用的所有情况”。
问题摘录:
从这两个函数的定义来看: Array.from() 方法从类似数组或可迭代对象创建一个新的 Array 实例。 但是,$A 函数仅接受类似数组的集合(任何具有数字索引的集合)。 因此 $A 无法处理没有数字索引的其他可迭代对象,例如 MapIterator。
当 $A 尝试通过读取某些本机可迭代对象(例如 MapIterator)中存在的 iterable.length 来创建新数组时,结果将返回一个长度为 0 的数组。