TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator)) JavaScript

Posted

技术标签:

【中文标题】TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator)) JavaScript【英文标题】: 【发布时间】:2021-05-21 06:24:25 【问题描述】:

我有以下代码:

    //creates matrix and converts it to JSON file
    var map = JSON.stringify(math.randomInt([10, 10],2));

    //create instance of Map
    const temp= new Map(_id: 2, map: map);
    temp.save(function (err) 
        if (err) return handleError(err);
    
    );

这将创建一个矩阵并将其放入 Map 集合中的我的 mongoDB 中,使用以下模型:

const mapSchema = new mongoose.Schema( 
    _id: Number,
    map: Array
)
  
const Map = mongoose.model('Map', mapSchema)

这很好用。但我想把整个第一个 sn-p 放到一个函数中,所以我可以把它放在另一个文件中,将它导入到我的 index.js 中,然后运行这个函数。所以我在它周围放了一个函数,像这样:

const generateMap = function() 
    var map = JSON.stringify(math.randomInt([10, 10],2));

    const temp = new Map(_id: 2, map: map);
    temp.save(function (err) 
        if (err) return handleError(err);
    
    );
    
;

我将函数导出到我的 index.js 文件并在那里运行该函数,但出现错误:

const temp= new Map(_id: 2, map: map);
             ^

TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))

有人可以帮我解决这个问题吗?

非常感谢

【问题讨论】:

【参考方案1】:

在出现错误的情况下,您无意中使用了 javascript 的标准 Map 构造函数,而不是您自己的 Map 构造函数。如果您将参数传递给 JavaScript 的 Map 构造函数,则该参数必须是可迭代的。

所以解决方法是确保你的构造函数是你使用它的范围内的那个。

强烈建议不要命名事物,以免它们与 JavaScript 标准库中的事物发生冲突。也许考虑调用您的构造函数XYZMap,其中XYZ 可以识别它在您的架构中的含义。这样您就不会发生名称冲突,并且当您没有它在范围内时,您会得到一个更明显的错误。 (错误是ReferenceError: XYZMap is not defined,希望能更清楚地说明发生了什么。)

【讨论】:

非常感谢。这就是问题所在。我是 JS 新手,不知道命名约定。

以上是关于TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator)) JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: 'method' object is not iterable

AngularFireList' TypeError: Object(...) is not a function at SwitchMapSubscriber.project

计算数字的变体 / TypeError: 'int' object is not callable

TypeError: Object(...) is not a function, 从 firebase 调用数据

离子本地通知 TypeError: Object(...) is not a function

Python: TypeError: 'dict' object is not callable