我正在尝试学习使用Array.from,因为我真的不喜欢先调用fill然后映射
例如,我正在转换
const tasks = 3
const graph = Array(tasks).fill(0).map(() => Array())
进入
const graph = Array.from(Array(tasks), () => new Array())
但出现以下错误
graph[1].push(1)
^
TypeError: Cannot read property 'push' of undefined
我在另一个帖子上看到有人发帖
var arr = Array.from(Array(2), () => new Array(4));
arr[0][0] = 'foo';
console.info(arr);
这也抛出
arr[0][0] = 'foo';
^
TypeError: Cannot set property '0' of undefined
逐行测试后,似乎此行将其破坏
const Deque = require('collections/deque')
关于https://www.collectionsjs.com为何破坏array.from()行为的任何想法?
正如人们在评论中说的那样,您的代码有效。我只是将其添加为包括此代码段的答案,以便您可以自己查看。
我想问题是与您呼叫graph[1].push(1)
的位置有关。我怀疑它是在无法访问graph
的地方被调用的。
下面介绍的最低版本有效,因此您需要找到导致错误的最低代码版本,并且您可能会在此过程中找到答案
const tasks = 3
const graph = Array.from(Array(tasks), () => new Array())
graph[1].push(1);
console.log(graph)