SUMIF () в JavaScript?

Используйте стандартные «резервные копии» (Deja-Dup).

Но сначала убедитесь, что установлена ​​«двуличность»:

sudo apt-get install duplicity

0
задан 13 August 2018 в 13:38

8 ответов

Его можно решить, используя 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);

0
ответ дан 15 August 2018 в 17:04

Использовать 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);

0
ответ дан 15 August 2018 в 17:04

Вы можете сгруппировать данные по символу с помощью 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);

0
ответ дан 15 August 2018 в 17:04

Вы можете использовать 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; }

3
ответ дан 15 August 2018 в 17:04

Вы можете взять 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);

0
ответ дан 15 August 2018 в 17:04
[F1]
1
ответ дан 15 August 2018 в 17:04

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);

0
ответ дан 15 August 2018 в 17:04

Я использовал комбинацию 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);

1
ответ дан 15 August 2018 в 17:04

Другие вопросы по тегам:

Похожие вопросы: