Сумма нескольких элементов массива и поместите эту сумму в таблицу по индексу (x, y) - PullRequest
0 голосов
/ 22 октября 2018

У меня есть следующие данные (загруженные ajax):

[
  {
    "x":     [1, 1, 2, 2, 2, 3, 3, 3, 4, 5],
    "y":     [3, 5, 4, 2, 5, 3, 4, 5, 1, 5],
    "Value": [18, 15, 11, 12, 9, 2, 33, 12, 2, 4],
  },
  {
    "x":     [1, 1, 2, 2, 2, 3, 3, 3, 4, 5],
    "y":     [3, 5, 4, 2, 5, 3, 4, 5, 1, 5],
    "Value": [16, 15, 11, 12, 9, 2, 33, 12, 2, 4],
  },
  {
    "x":     [1, 1, 2, 2, 2, 3, 3, 3, 4, 5],
    "y":     [3, 5, 4, 2, 5, 3, 4, 5, 1, 5],
    "Value": [14, 15, 11, 12, 9, 2, 33, 12, 2, 4],
  }
]

И у меня есть таблица 5x5 .

Как рассчитать сумму каждого кратногоэлемент "value" и положить его в таблицу правильного индекса?

Мой код js сейчас:

function risk(data) {
    let sum = 0;

    for (i = 0; i < data.length; i++) {
      let b = data[i].Value;
      console.log(b); // (10) [18, 15, 11, 12, 9, 2, 33, 12, 2, 4]
                      // (10) [16, 15, 11, 12, 9, 2, 33, 12, 2, 4]
                      // (10) [14, 15, 11, 12, 9, 2, 33, 12, 2, 4]
    }
}

Конечный результат должен быть таким:

enter image description here

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Вы можете взять объект для сбора значений.Чтобы получить результат обратно в таблицу, вы можете перебрать координаты и получить значение.

var data = [{ x: [1, 1, 2, 2, 2, 3, 3, 3, 4, 5], y: [3, 5, 4, 2, 5, 3, 4, 5, 1, 5], Value: [18, 15, 11, 12, 9, 2, 33, 12, 2, 4] }, { x: [1, 1, 2, 2, 2, 3, 3, 3, 4, 5], y: [3, 5, 4, 2, 5, 3, 4, 5, 1, 5], Value: [16, 15, 11, 12, 9, 2, 33, 12, 2, 4] }, { x: [1, 1, 2, 2, 2, 3, 3, 3, 4, 5], y: [3, 5, 4, 2, 5, 3, 4, 5, 1, 5], Value: [14, 15, 11, 12, 9, 2, 33, 12, 2, 4] }],
    sum = data.reduce((r, {x, y, Value}) => 
        (x.forEach((x, i) => {
        r[x] = r[x] || {};
        r[x][y[i]] = (r[x][y[i]] || 0) + Value[i];
    }), r), {});
    
console.log(sum);
0 голосов
/ 22 октября 2018

Вы можете использовать reduce, чтобы построить свою матрицу «результата», добавив «Значение» к соответствующей x и y координате в матрице, когда вы выполняете все элементы в ваших исходных данных.

const data = [
  {
    "x":     [1, 1, 2, 2, 2, 3, 3, 3, 4, 5],
    "y":     [3, 5, 4, 2, 5, 3, 4, 5, 1, 5],
    "Value": [18, 15, 11, 12, 9, 2, 33, 12, 2, 4],
  },
  {
    "x":     [1, 1, 2, 2, 2, 3, 3, 3, 4, 5],
    "y":     [3, 5, 4, 2, 5, 3, 4, 5, 1, 5],
    "Value": [16, 15, 11, 12, 9, 2, 33, 12, 2, 4],
  },
  {
    "x":     [1, 1, 2, 2, 2, 3, 3, 3, 4, 5],
    "y":     [3, 5, 4, 2, 5, 3, 4, 5, 1, 5],
    "Value": [14, 15, 11, 12, 9, 2, 33, 12, 2, 4],
  }
];

const res = new Array(5).fill(0).map(n => new Array(5).fill(0));
data.reduce((acc, curr) => {
  curr.Value.forEach((v, i) => acc[curr.x[i] - 1][curr.y[i] - 1] += v);
  return res;
}, res);

console.log(res);
...