группировать значения по десятичной цене и сумму по количеству - PullRequest
0 голосов
/ 22 февраля 2019

Я хотел бы сгруппировать объект массива по цене и сумму по количеству в javascript?Например:

var array=[
  {price:0.112,qty:1},
  {price:0.218,qty:1},
  {price:0.216,qty:1},
  {price:0.321,qty:1},
  {price:0.325,qty:2},
  {price:0.335,qty:2},
  {price:0.536,qty:1}
]

После того, как я сгруппирую его по price с ценой decimal=2, я получу новый массив, например:

цена decimal=2, ожидается получение get_number = 3вывод:

[
  {price:0.32,qty:3},
  {price:0.33,qty:2},
  {price:0.53,qty:1}
]

десятичная цена = 1, get_number = 2 - ожидаемый вывод:

[
  {price:0.3,qty:5},
  {price:0.5,qty:1}
]

1 Ответ

0 голосов
/ 22 февраля 2019

Вы можете использовать простой Array#forEach() метод , чтобы перебрать значения array и отфильтровать их по price, используя .toFixed()method :

let result = [];
array.forEach(function(a) {
  a.price = a.price.toFixed(1);
  if (result.some(x => x.price === a.price)) {
    result.find(x => x.price === a.price).qty += a.qty;
  } else {
    result.push(a);
  }
});

Здесь .toFixed(1) будет сравнивать цены, используя только один десятичный знак, если вы хотите сравнить с двумя десятичными знаками, вам просто нужно изменить его на .toFixed(2).

Демонстрация:

Это рабочий фрагмент:

var array=[
  {price:0.112,qty:1},
  {price:0.218,qty:1},
  {price:0.216,qty:1},
  {price:0.321,qty:1},
  {price:0.325,qty:2},
  {price:0.335,qty:2},
  {price:0.536,qty:1}
]

let result = [];
array.forEach(function(a) {
  a.price = a.price.toFixed(1);
  if (result.some(x => x.price === a.price)) {
    result.find(x => x.price === a.price).qty += a.qty;
  } else {
    result.push(a);
  }
});

console.log(result);
...