Объедините повторяющиеся строки и суммируйте значения - PullRequest
0 голосов
/ 04 октября 2019

У меня есть следующие массивы, они уже отсортированы:

day =   [5,5,5,6,6,   6,   6,7,7,7,   8,   8,8];
time =  [0,0,0,0,0,1.03,0.28,0,0,0,0.63,5.58,1];
class = [ , , , , ,   b,   b, , , ,   c,   b,c];

Я хочу удалить дублирующиеся значения в массиве дня и добавить соответствующее значение в массив времени, но только для соответствующего классаили ноль, если класс пуст, было бы что-то вроде этого:

day_fix = [5,   6,7,   8];
class_b = [0,1.31,0,5.58];
class_c = [0,   0,0,1.63];

спасибо.

1 Ответ

0 голосов
/ 05 октября 2019

Я думаю, что следующее может вам немного помочь:

const day   = [5,5,5,6,6,   6,   6,7,7,7,   8,   8,  8]
const time  = [0,0,0,0,0,1.03,0.28,0,0,0,0.63,5.58,  1]
const clazz = [ , , , , , 'b', 'b', , , , 'c', 'b','c']

const resultDays = {}

day.forEach((d, i) => {
  resultDays[d] = resultDays[d] || {}
  if (clazz[i]) {
    resultDays[d][clazz[i]] = (resultDays[d][clazz[i]] || 0) + time[i]
  }
})

console.log(resultDays)

Выходные данные - это объект, который является просто еще одним представлением предоставленного вами результата. Таким образом, это будет намного проще, потому что в будущем отпадает необходимость создания отдельных массивов для каждого класса.

...