【问题标题】:Unable to run methods on imported arrays and maps in Javascript无法在 Javascript 中对导入的数组和映射运行方法
【发布时间】:2021-10-29 08:36:18
【问题描述】:

我在 FILE 1 中创建了一个名为 queue 的映射,该映射全部构建在 FILE 1 中,然后在所有值和键都构建完成后,我使用 module.exports.queue = (queue) 将其导出到 FILE 2。

文件 1:

let queue = new.Map()
let key = "some keys"
let value = "some values"
if(!queue.has(key)){
        queue.set(key, new Set(value));

       } else{
         queue.get(key).add(value);

       }
module.exports.queue = (queue)

现在在文件 2 中,我创建了一个变量 Words = require("./FILE 1"),然后我做了 let x = Words.queue.keys(),然后将 x 记录到控制台,这给出了它无法读取未定义的属性“键”的错误。

文件 2:

let Words = require("./FILE1")
let x
x = Words.queue.keys()
console.log(x)

然后我尝试在 FILE 1 中创建一个包含 queue.keys 的数组,然后将其导入到 FILE 2,但后来我遇到了无法再检查特定键的值的问题。 (如果您知道解决方案,请告诉我,我基本上想从地图中获取特定键的值,然后将这些值放入数组中以获取更多功能)。

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:

    我很困惑为什么这不能解决你的问题。

    let Words = require("./FILE1")
    let value = Words.queue.get('your specific key')
    console.log(value)
    

    【讨论】:

    • 这也让我感到困惑,因为从技术上讲它应该可以工作,但它给出了一个错误值 = Words.queue.get(guildIDString) ^ TypeError: Cannot read property 'get' of undefined
    • 可能是您遇到了文件名问题。
    • 没有原因只是控制台日志队列通过在第二个文件中执行 console.log(Words.queue) 记录整个队列,所以这不是问题
    【解决方案2】:

    这里发生了很多事情:

    您按如下方式实例化新地图:

    const queue = new Map();
    

    你有new.map()

    其次,当您调用您的密钥时,您当前正在调用Words.queue.keys() 这是错误的,应该是

    words.keys();
    

    现在您在这里尝试构建的是一个队列,这不一定是此处考虑可重用性的最佳方法。使用文件 1 内的 javascript 中的类声明它,然后将其导入到 file2 并在那里构建您的队列,想法是您可以在任何地方导入队列并在需要时构建任何您想要的队列。队列有很多方法入队(添加到队列)出队(从队列中删除)等等......伴随着它们,你可以在这里做一个惊人的阅读:https://www.geeksforgeeks.org/implementation-queue-javascript/。

    在这里快速浏览一下您要做什么以及获取键的值是什么意思有点难以理解(键是类似对象的结构还是只是数组内的值?)队列并不是真正用来搜索值的,您可能需要一个链表或其他一些结构......

    如果您能阐明或展示您想要实现的最终结果,那么对于我们这些希望帮助您的人来说,这将大有帮助。

    【讨论】:

    • 好吧,所有 new.map() 中的第一个是输入错误,它实际上是实际代码中的 new Map()。我在这里尝试构建的是一个地图(这里命名为队列,您可以将其命名为任何名称),其中包括(如果您熟悉 discord.js)message.guild.id 这是一个数字,我将该数字设置为键例如 77650317899228728918 是键,然后使用不和谐命令我从用户那里获取此键的值并将它们放入一个集合中,所以基本上我的地图看起来像这样:( Map(1) { '77650317899228728918' => Set( 1) { 'a' } } ) 这里 a 是用户的值,然后
    • 继续:然后我想在另一个 javascript 文件中使用此映射,该文件读取所有消息并获取 message.guild.id 用于消息检查该映射是否存在该公会 ID 作为键,然后检查该键的值是什么以及它们是否在消息中,然后运行命令。所以基本上我坚持的第二部分是将地图导入第二个文件,然后检查 message.guild.id 和地图中该公会 ID 的值(PS:我使用集合是因为​​一个公会 ID可以有多个值)
    • 那你怎么看?
    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 2012-04-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2016-08-14
    相关资源
    最近更新 更多