Используйте стандартные «резервные копии» (Deja-Dup).
Но сначала убедитесь, что установлена «двуличность»:
sudo apt-get install duplicity
Его можно решить, используя reduce. Я добавляю C и D для большего количества тестов.
const a = ['A', 'B', 'B', 'A', 'B', 'A', 'C', 'C', 'D'];
const b = [4, 2, 7, 6, 8, 9, 10, 11, 20];
const sum = a.reduce((acc, item, index) => {
if (!acc[item]) {
acc[item] = 0
};
acc[item] += b[index] || 0;
return acc;
}, {});
const concat = Object.entries(sum).map(entry => entry.join(':')).join(':');
console.log(concat);
Использовать array.reduce:
var a = ['A', 'B', 'B', 'A', 'B', 'A'];
var b = [4, 2, 7, 6, 8, 9];
var res = Object.entries(a.reduce((m, o, i) => (m[o] = m.hasOwnProperty(o) ? m[o] + b[i]: b[i], m), {})).map(([key, value]) => `${key}:${value}`).join(':');
console.log(res);
Вы можете сгруппировать данные по символу с помощью Array.prototype.reduce и построить желаемый вывод с помощью Array.prototype.map:
var a = ['A', 'B', 'B', 'A', 'B', 'A'];
var b = [4, 2, 7, 6, 8, 9];
var dataObj = a.reduce((t, c, i) => (t[c] = (t[c] || 0) + b[i], t), {});
var result = Object.keys(dataObj).map(c => `${c}:${dataObj[c]}`).join(':');
console.log(result);
Вы можете использовать Map:
let a = ['A', 'B', 'B', 'A', 'B', 'A'];
let b = [4, 2, 7, 6, 8, 9];
let m = ((map) => {
a.forEach((v, i) => {
map.set(v, ((map.get(v) || 0) + b[i]));
});
return map;
})(new Map());
console.log([...m.entries()]);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Вы можете взять Map для подсчета и присоединиться к результату для желаемого формата.
var a = ['A', 'B', 'B', 'A', 'B', 'A'],
b = [4, 2, 7, 6, 8, 9],
result = Array
.from(
a.reduce((m, k, i) => m.set(k, (m.get(k) || 0) + b[i]), new Map),
a => a.join(':')
)
.join(':');
console.log(result);
a = ['A', 'B', 'B', 'A', 'B', 'A'];
b = [4, 2, 7, 6, 8, 9];
// 1. Create an object of sums
const sumMap = a.reduce((init, curr, index) => Object.assign(init, { [curr]:
(init[curr] || 0) + b[index] }), {});
// 2. Transform to a string
const res = Object.entries(sumMap).map(([key, sum]) => `${key}:${sum}`).join(':');
console.log(res);
Я использовал комбинацию reduce и map, сокращает вычисление суммы каждого элемента, а карта форматирует строку.
const a = ["A", "B", "B", "A", "B", "A"];
const b = [4, 2, 7, 6, 8, 9];
const sumObject = b.reduce((acc,e,i,arr) => {
acc[a[i]] = (acc[a[i]] || 0) + e;
return acc;
}, {});
const sum = Object.entries(sumObject).map(el => el[0]+":"+el[1]).join(":");
console.log(sum);