我似乎在遍历数组时遇到了一个问题。无论数组的大小如何,循环似乎只执行一次。我尝试使用不同的循环方法,但错误仍然存在。
作为背景信息,我正在尝试制作一个机器人,用户可以用它来奖励对方的积分。其他的一切似乎都很好。唯一的问题是,我希望设置一个用户在一天内可以给另一个用户的最大点数,但我在循环存储此信息的数组时遇到问题。
以下是我的代码的相关部分:
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)
将产生以下输出:
loop end, results: false
loop end, results: [object Object]
loop end, results: false
path 2
[ { id: 'date', time: 28 }, { '654321': 3, id: 123456 } ]
(这是评论的转载。我的道歉。)
发布于 2020-04-29 03:03:40
正如@mbojko所指出的,您需要使用find方法在getTimerSenderIdTable
函数中返回找到的obj,如下所示
const getTimerSenderIdTable = (id) => {
return timer.find(item => item.id === id});
};
发布于 2020-04-29 02:28:57
似乎是因为这条线
if (getTimerSenderIdTable("date") !== d.getDate()) {
timer = [];
这将清空数组,并且接下来的代码行将仅推送单个元素
https://stackoverflow.com/questions/61487285
复制相似问题