首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >过滤数组问题

过滤数组问题
EN

Stack Overflow用户
提问于 2022-09-05 14:19:10
回答 2查看 54关注 0票数 0

我将数组导入到模块中,并从该数组中添加和删除项。当我推送时,它会全局地将项目添加到数组中,所以如果我在另一个模块中使用相同的数组,它将包括我推送的这个项。但是当我尝试过滤时,当同一个数组与过滤器一起运行时,它只会移除特定模块中的内容。如何使它在全球范围内修改?

代码语言:javascript
运行
复制
let { ignore } = require('../utils/handleIgnore');
const questions = require('./quesiton');

const AgendarCollector = async (client, message) => {
    ignore.push(message.from);
    let counter = 0;
    const filter = (m) => m.from === message.from;
    const collector = client.createMessageCollector(message.from, filter, {
        max: 4,
        time: 1000 * 60,
    });
    await client.sendText(message.from, questions[counter++]);

    collector.on('start', () => {});
    await collector.on('collect', async (m) => {
        if (m) {
            if (counter < questions.length) {
                await client.sendText(message.from, questions[counter++]);
            }
        }
    });
    await collector.on('end', async (all) => {
        ignore = ignore.filter((ignored) => ignored !== message.from);
        console.log(ignore);
        const finished = [];
        if (all.size < questions) {
            console.log('não terminado');
        }
        await all.forEach((one) => finished.push(` ${one.content}`));
        await client.sendText(message.from, `${finished}.\nConfirma?`);
    });
};

module.exports = AgendarCollector;

请参见,在此代码中,导入忽略数组,然后在代码开始时将项推送到它,并在其结束时移除。但是,当我在另一个模块中检查相同的数组时,该项将继续进行。我试图通过使用模块内的函数来更改这个忽略数组,但仍然无法工作。

代码语言:javascript
运行
复制
let ignore = [];

const addIgnore = (message) => {
    ignore.push(message.from);
};
const removeIgnore = (message) => {
    ignore = ignore.filter((ignored) => ignored !== message.from);
    console.log(ignore);
};
console.log(ignore);
module.exports = { ignore, addIgnore, removeIgnore };
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-05 15:11:56

您正在使用变量进行导入和导出,从而解决问题。

相反,使用getter。

编写一个函数,它将返回ignore数组。就像这样:

代码语言:javascript
运行
复制
const getIgnoredList = () => {
    return ignore;
};

在第一个代码中,导入getIgnoredList并将ignore替换为getIgnoredList()

说明:

每当我们导入变量时,只导入特定时间的值,就会被导入,并且不会有任何数据绑定。因此,即使您认为您正在更新实际数据,也不会对数据进行任何更改。

票数 0
EN

Stack Overflow用户

发布于 2022-09-05 17:26:34

当你使用要求时(.)语句只执行一次。因此,当您尝试访问该属性时,它每次都会提供相同的值。相反,您应该使用getter。

代码语言:javascript
运行
复制
let data = {
   ignore : [],
   get getIgnore() {
     return this.ignore
   }
}
module.export = {
  getIgnore: data.getIgnore,
}

那么在任何您想访问ignore的地方

var {getIgnore}= require('FILE_NAME')

现在:console.log(getIgnore)将调用getter并给出ignore的当前值。

使用getter将允许您访问来自其他模块的特定变量,但如果您希望更改来自其他模块的这些变量的值,则必须使用setter。

更多关于getter 这里的信息

更多关于setters 这里的信息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73610816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档