Почему мой forEach () l oop выполняется только один раз? - PullRequest
1 голос
/ 28 апреля 2020

Кажется, я столкнулся с проблемой при циклическом просмотре массива. Кажется, что l oop выполняется только один раз, независимо от размера массива. Я пытался использовать разные методы зацикливания, но ошибка все еще сохраняется.

В качестве справочной информации я пытаюсь создать бота, с помощью которого пользователи могут начислять друг другу очки. Все остальное казалось в порядке. Единственная проблема заключается в том, что я sh задаю максимальное количество баллов, которое один пользователь может дать другому в день, и у меня возникают проблемы с циклом в массиве, в котором хранится эта информация.

Эти соответствующие части моего кода:

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 } ]

(Это репост из комментариев. Мои извинения.)

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Кажется, из-за этой строки

if (getTimerSenderIdTable("date") !== d.getDate()) {
        timer = [];

Это очистит массив, а в следующих строках кода будет только pu sh единственный элемент

0 голосов
/ 28 апреля 2020

, как указал @mbojko, вы захотите использовать метод find для возврата найденного объекта внутри функции getTimerSenderIdTable, например

const getTimerSenderIdTable = (id) => { 
    return timer.find(item => item.id === id}); 
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...