javascript выполнить фильтрацию после завершения каждого l oop - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть данные из запроса API и я пытался сохранить их во временном массиве, используя foreach, и фильтровать временный массив после завершения foreach .... в моем случае я добавил счетчик для сравнения, если счетчик равна длине данных API. Тем не менее, я заметил, что он работал только тогда, когда данные API малы, скажем, data.length = 15, но когда он достигает 20+, каким-то образом он игнорирует счетчик.
вот мой код:

    var flag = 0;
    dato.forEach((el) => {
         temp.push({ 
              id: el.id,
              sex: el.sex,
              name: el.name,
              [self.momentFormat(el.date, 'YYYY-MM-DD').toString()]: ({
                    activity: el.activity,
                    status : el.status,
                    record: el.record
              })
         });
         flag++;
    });

    setTimeout(() => {
        //This is what I get when I pass a parameter with date from Apr 1 to Apr 15, 
        //But when I pass Apr 1 to Apr 20... None of the logs shows up even though the api data is not empty
        console.log('dato length=', dato.length); //I get 8
        console.log('temp length=', temp.length); //I get 13
        console.log('flag length=', flag.length); //I get 8
    },5000)

    if(flag == dato.length) {
        var result = temp.filter(function(v) {
        return this[v.id]?
                !Object.assign(this[v.id], v) : (this[v.id] = v)
    }, {});
    self.overtime_dtr_records = result;
}

Я пытался установить время ожидания, но я не думаю, что это самый оптимальный способ. Помимо устранения цели быстрого запроса API, я также заметил, что некоторые из temporary array data не включены в процесс подбора.

ОБНОВЛЕНИЕ: Я думаю, что сравнение счетчика с длиной данных является правильным. Проблема в том, что когда я записываю длину данных API, я получаю 45, но l oop повторяется только 4 раза

...