Сортировать и манипулировать массивом в JavaScript - PullRequest
0 голосов
/ 28 мая 2019

У меня есть следующий массив:

var curr = [{"Год": 2019, "Заголовок": "Пример управления активами", "Сумма": 1020000.0, "Бюджет": 0

}, {
  "Year": 2019,
  "Title": "Monday test 2",
  "Sum": 2546658.0,
  "Budget":100
}, {
  "Year": 2020,
  "Title": "Asset Management Sample",
  "Sum": 1020000.0,
  "Budget":1000
}, {
  "Year": 2020,
  "Title": "Monday test 2",
  "Sum": 3472000.0,
  "Budget":100
}, {
  "Year": 2021,
  "Title": "Asset Management Sample",
  "Sum": 1020000.0,
  "Budget":100
}, {
  "Year": 2021,
  "Title": "Monday test 2",
  "Sum": 2452000.0,
  "Budget":100
}]

Что мне нужно изменить на:

[{
  "Year": 2019,
  "Asset Management Sample": 1020000.0,
  "Monday test": 2546658.0
}, {
  "Year": 2020,
  "Asset Management Sample": 1020000.0,
  "Monday test 2": 3472000.0
}, {
  "Year": 2021,
  "Asset Management Sample": 1020000.0,
  "Monday test 2": 2452000.0
}]

С помощью более ранних постеров я использовал .reduce (слегка измененный снизу), чтобы сгенерировать это:

      var res = arr.reduce(function(acc, curr) {
      acc[curr.Year] = acc[curr.Year];
      acc[curr.Year] = acc[curr.Year] || { Year: curr.Year } ;
      acc[curr.Year][curr.Title] = curr.Sum;

      return acc;

Мне нужно расширить это, чтобы включить сумму всех значений бюджета для каждого года (должна быть одна стоимость бюджета в год).Я добавил следующую строку перед возвратом:

acc[curr.Year][curr.Budget] = curr[curr.Budget] || { Budget: curr.Budget } ;

Это добавляет отдельные записи для каждого значения бюджета.Как суммировать значения бюджета и возвращать их, не затрагивая другой возвращаемый массив?

1 Ответ

2 голосов
/ 28 мая 2019

Использовать reduce примерно так:

const arr = [{"Year":2019,"Title":"Asset Management Sample","Sum":1020000},{"Year":2019,"Title":"Monday test 2","Sum":2546658},{"Year":2020,"Title":"Asset Management Sample","Sum":1020000},{"Year":2020,"Title":"Monday test 2","Sum":3472000},{"Year":2021,"Title":"Asset Management Sample","Sum":1020000},{"Year":2021,"Title":"Monday test 2","Sum":2452000}];
const res = Object.values(arr.reduce((acc, { Year, Title, Sum }) => (acc[Year] = acc[Year] || { Year }, acc[Year][Title] = Sum, acc), {}));
console.log(res);

Более подробная версия:

const arr = [{"Year":2019,"Title":"Asset Management Sample","Sum":1020000},{"Year":2019,"Title":"Monday test 2","Sum":2546658},{"Year":2020,"Title":"Asset Management Sample","Sum":1020000},{"Year":2020,"Title":"Monday test 2","Sum":3472000},{"Year":2021,"Title":"Asset Management Sample","Sum":1020000},{"Year":2021,"Title":"Monday test 2","Sum":2452000}];
const res = Object.values(arr.reduce((acc, { Year, Title, Sum }) => {
  acc[Year] = acc[Year] || { Year };
  acc[Year][Title] = Sum;
  return acc;
}, {}));
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }

Синтаксис ES5:

var arr = [{"Year":2019,"Title":"Asset Management Sample","Sum":1020000},{"Year":2019,"Title":"Monday test 2","Sum":2546658},{"Year":2020,"Title":"Asset Management Sample","Sum":1020000},{"Year":2020,"Title":"Monday test 2","Sum":3472000},{"Year":2021,"Title":"Asset Management Sample","Sum":1020000},{"Year":2021,"Title":"Monday test 2","Sum":2452000}];
var res = arr.reduce(function(acc, curr) {
  acc[curr.Year] = acc[curr.Year] || { Year: curr.Year };
  acc[curr.Year][curr.Title] = curr.Sum;
  return acc;
}, {});
res = Object.keys(res).map(function(key) {
  return res[key];
});
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...