Имейте два массива javascipt, чтобы объединить в один объект и добавить значения - PullRequest
1 голос
/ 16 апреля 2020

Я хочу объединить следующие два массива одинакового размера:

var depts = [ 'A', 'D', 'M', 'G', 'D', 'B', 'D', 'A', 'A' ];
var cnts  = [  3,   7,  15,   2,   9,   5,   12,  4,   8  ];

В объект, подобный этому, обратите внимание, что cnts - это итоговые значения для каждой точки:

{A: 15, D: 19, M: 15, G: 2, B: 5}

Обычно я выполнить интеграцию данных до интеграции с веб-сайтом, однако я хочу начать выполнять это в JavaScript. Некоторый код, который приблизительно имитирует то, что я пытаюсь сделать.

var obj = {};
for(var i = 0; i < depts.length; i++)
{
    console.log(depts[i], cnts[i]);
    obj[depts[i]] = cnts[i]; // <-  don't know how to increament assignment 
}
console.log(obj);

Этот код создает объект, однако не суммирует cnts по depts:

{A: 8, D: 12, M: 15, G: 2, B: 5}

Ответы [ 3 ]

2 голосов
/ 16 апреля 2020

Просто добавьте проверку, если свойство существует, и присвойте ноль. Позже добавьте значение к нему.

var depts = ['A', 'D', 'M', 'G', 'D', 'B', 'D', 'A', 'A'],
    cnts = [3, 7, 15, 2, 9, 5, 12, 4, 8],
    obj = {};

for (var i = 0; i < depts.length; i++) {
    if (!obj[depts[i]]) obj[depts[i]] = 0; // use an initial value
    obj[depts[i]] += cnts[i];              // add value
}

console.log(obj);
1 голос
/ 16 апреля 2020

Попробуйте это

const depts = [ 'A', 'D', 'M', 'G', 'D', 'B', 'D', 'A', 'A' ];
const cnts  = [  3,   7,  15,   2,   9,   5,   12,  4,   8  ];
let obj = {};

// loop over the first array, if not already in obj, put a zero before adding
depts.forEach((dept,i) => obj[dept] = (obj[dept] || 0) + cnts[i])

console.log(obj);
0 голосов
/ 16 апреля 2020

var depts = [ 'A', 'D', 'M', 'G', 'D', 'B', 'D', 'A', 'A' ];
var cnts  = [  3,   7,  15,   2,   9,   5,   12,  4,   8  ];

const lkp = depts.reduce((lkp, cur, i) => {
    return {
        ...lkp,
        [cur]: ~~lkp[cur] + cnts[i]
    }
}, {})
console.log (lkp)
...