javascript: из массива значений сформировать массив с накопленными значениями

есть массив содержащий данные в виде [year, count]

надо получить массив содержащий уже накопленные за все предыдущие годы значения, но в том же виде - [year, count]

пример данных:

input: [[2010, 10], [2015, 2], [2022, 8]]
output: [[2010, 10], [2015, 12], [2022, 20]]

сделал в лоб:

    // подготовить данные
    let data_accum: [number, number][] = [];
    let count:number = 0;
    data.forEach((value: [number, number]) => {
        count += value[1];
        data_accum.push([value[0], count]);
    });

Такой вопрос - а как это сделать покрасивше, что называется "в одну строчку"?

P.S.

другой вариант:

let data_accum = [];
data.reduce((total, value) => {
    data_accum.push([value[0], total + value[1]]);
    return total + value[1];
}, 0)

избавляется от инициализации счетчика


Ответы (1 шт):

Автор решения: Zhihar
data_accum = data.map((value, i, arr) => [value[0], value[1] + arr.slice(0, i).reduce((total, elem) => total + elem[1], 0)]) 

Нашел решение, но оно все таки очень неоптимальное, хотя для коротких массивов имеет право на жизнь :(

другой подход, лишенный предыдущих недостатков и немного короче:

data_accum = data.reduce((total, value) => [...total, [value[0], value[1] + (total.length ? total[total.length - 1][1] : 0)]], [])

или так:

data_accum = data.reduce((total, value) => [...total, [value[0], value[1] + total[total.length - 1][1]]], [[0, 0]]).slice(1)
→ Ссылка