首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的forEach()循环只执行一次?

为什么我的forEach()循环只执行一次?
EN

Stack Overflow用户
提问于 2020-04-29 02:23:39
回答 2查看 476关注 0票数 1

我似乎在遍历数组时遇到了一个问题。无论数组的大小如何,循环似乎只执行一次。我尝试使用不同的循环方法,但错误仍然存在。

作为背景信息,我正在尝试制作一个机器人,用户可以用它来奖励对方的积分。其他的一切似乎都很好。唯一的问题是,我希望设置一个用户在一天内可以给另一个用户的最大点数,但我在循环存储此信息的数组时遇到问题。

以下是我的代码的相关部分:

代码语言:javascript
运行
复制
var timer = []; //Timer stores the values.

const getTimerSenderIdTable = (id) => { 
    let found = false;
    timer.forEach(function(dat) { // This is the problematic loop.
        if (dat.id === id) {
            found = dat;
        }
    })
    console.log("loop end, results: " + found);
    return found;
};

const timerManager = (senderId, targetId, pointSurp) => { //All arguments are integers.
    let d = new Date()
    if (getTimerSenderIdTable("date") !== d.getDate()) {
        timer = [];
        timer.push({"id":"date", "time":d.getDate()});
        if (getTimerSenderIdTable("date")) {
            if (getTimerSenderIdTable(senderId)) {
                console.log("path 1");
            } else {
                console.log("path 2");
                timer.push({"id":senderId, [targetId]:pointSurp});
            }
        }
    } else {
        if (getTimerSenderIdTable("date")) {
            if (getTimerSenderIdTable(senderId)) {
                console.log("path 3");
            } else {
                console.log("path 4");
                timer.push({"id":senderId, [targetId]:pointSurp});
            }
        }
    }
    console.log(timer)
};

*编辑:感谢您的评论。下面是一个示例:

调用timerManager(123456, 654321, 3)将产生以下输出:

代码语言:javascript
运行
复制
loop end, results: false
loop end, results: [object Object]
loop end, results: false
path 2
[ { id: 'date', time: 28 }, { '654321': 3, id: 123456 } ]

(这是评论的转载。我的道歉。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-29 03:03:40

正如@mbojko所指出的,您需要使用find方法在getTimerSenderIdTable函数中返回找到的obj,如下所示

代码语言:javascript
运行
复制
const getTimerSenderIdTable = (id) => { 
    return timer.find(item => item.id === id}); 
};
票数 0
EN

Stack Overflow用户

发布于 2020-04-29 02:28:57

似乎是因为这条线

代码语言:javascript
运行
复制
if (getTimerSenderIdTable("date") !== d.getDate()) {
        timer = [];

这将清空数组,并且接下来的代码行将仅推送单个元素

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

https://stackoverflow.com/questions/61487285

复制
相关文章

相似问题

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