Как я могу сгруппировать массив продаж по месяцам, а затем по покупателям? - PullRequest
2 голосов
/ 19 июня 2019

У меня есть множество продаж различных продуктов в год, которые хранятся в месяцах для ряда клиентов.Я хочу иметь возможность группировать покупки клиентов в год в виде одного столбца.

var sales = [
  ["Jan", "Customer 1", "Product 1", 538]
  ["Feb", "Customer 1", "Product 1", 0]
  ["March", "Customer 1", "Product 1", 252]
  ["Apr", "Customer 1", "Product 1", 0]
  ["May", "Customer 1", "Product 1", 630]
  ["June", "Customer 1", "Product 1", 945]
  ["July", "Customer 1", "Product 1", 0]
  ["Aug", "Customer 1", "Product 1", 630]
  ["Sept", "Customer 1", "Product 1", 756]
  ["Oct", "Customer 1", "Product 1", 0]
  ["Nov", "Customer 1", "Product 1", 0]
  ["Dec", "Customer 1", "Product 1", 630]
  ["Jan", "Customer 1", "Product 2", 50]
  ["Feb", "Customer 1", "Product 2", 630]
  ...
]

Я попытался сгруппировать уникальные продукты, затем получить уникальных клиентов, а затем получить уникальные продукты, как показано ниже, ноЯ не могу понять, как двигаться дальше.

// Get a list of unique products
var products = sales.map(item => {
  return item[2];
}).filter((val, index, self) => {
  return self.indexOf(val) === index;
});
console.log(products);

// Ge a list of unique customers
var targets = sales.map(item => {
  return item[1]
}).filter((val, index, self) => {
  return self.indexOf(val) === index
});
console.log(targets);

Я хочу массив объектов, сгруппированных по клиентам и таким продуктам

[
  {
    "customer": "Customer 1",
    "product": "Product 1",
    "jan" 538,
    "feb": 0,
    "march": 252
    ...
  },
  {
    "customer": "Customer 1",
    "product": "Product 2",
    "jan" 50,
    "feb": 630,
    ...
  }
]

Любые идеи?

1 Ответ

3 голосов
/ 19 июня 2019

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

var sales = [["Jan", "Customer 1", "Product 1", 538], ["Feb", "Customer 1", "Product 1", 0], ["March", "Customer 1", "Product 1", 252], ["Apr", "Customer 1", "Product 1", 0], ["May", "Customer 1", "Product 1", 630], ["June", "Customer 1", "Product 1", 945], ["July", "Customer 1", "Product 1", 0], ["Aug", "Customer 1", "Product 1", 630], ["Sept", "Customer 1", "Product 1", 756], ["Oct", "Customer 1", "Product 1", 0], ["Nov", "Customer 1", "Product 1", 0], ["Dec", "Customer 1", "Product 1", 630], ["Jan", "Customer 1", "Product 2", 50], ["Feb", "Customer 1", "Product 2", 630]],
    result = Object.values(sales.reduce((r, [month, customer, product, value]) => {
        var key = [customer, product].join('|');
        r[key] = r[key] || { customer, product };
        r[key][month.toLowerCase()] = value;
        return r;
    }, {}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...