【问题标题】:Array.from in javascript not working when requiring JavaScript Collections.js需要 JavaScript Collections.js 时,JavaScript 中的 Array.from 不起作用
【发布时间】:2019-11-09 21:37:56
【问题描述】:

我正在尝试学习使用 Array.from,因为我真的不喜欢先调用填充然后再映射

例如我正在转换

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() 行为吗?

【问题讨论】:

  • @Pointy 它是一个简单的整数,上面添加以供参考
  • 对,我无法重现问题,Array.from(Array(tasks), () => new Array()) 正确创建了一个数组数组。
  • @Pointy 然后你能像上面那样执行推送或设置一个值吗?我看到我得到一个长度等于“任务”的数组,但项目未定义
  • 是的,您的代码运行良好。您可以在开发者控制台中自行尝试。

标签: javascript arrays collectionsjs


【解决方案1】:

正如人们在 cmets 中所说,您的代码有效。我只是将其添加为包含此代码 sn-p 的答案,以便您自己查看。

我想问题与您拨打graph[1].push(1) 的位置有关。我怀疑它是从无法访问graph 的地方调用的。

下面给出的最小版本可以工作,所以你需要找到导致错误的代码的最小版本,你可能会在这个过程中找到答案

const tasks = 3
const graph = Array.from(Array(tasks), () => new Array())
graph[1].push(1);
console.log(graph)

【讨论】:

  • 好吧,至少我没疯,我发现出于某种原因破坏它的是这一行:“const Deque = require('collections/deque')” 知道为什么会破坏array.from() 行为?
【解决方案2】:

如上所述,我的代码本身应该可以工作,但是 collections.js 中的某些内容会破坏 array.from()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 2021-02-12
    • 2017-11-17
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    相关资源
    最近更新 更多