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

  • 14 августа 2023 г. 11:06
Ответы на вопрос 3
Вот пример кода на языке JavaScript, позволяющий решить описанную задачу:

```javascript
// Исходный массив данных
const DATASETS = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 10]
];

// Массив цветов
const COLORS = ['red', 'green', 'blue'];

// 1. Вычисляем суммы значений каждого набора данных
const sums = DATASETS.map(dataset => dataset.reduce((acc, value) => acc + value, 0));

// 2. Создаем новый объект с суммами значений и соответствующими цветами
const NEW_OBJ_WITH_COLORS_ON_DATA = {};
sums.forEach((sum, index) => {
  NEW_OBJ_WITH_COLORS_ON_DATA[sum] = COLORS[index];
});

// 3. Применяем объект с цветами к каждому набору данных
const NEW_DATASETS = DATASETS.map(dataset => {
  const sum = dataset.reduce((acc, value) => acc + value, 0);
  return dataset.concat(NEW_OBJ_WITH_COLORS_ON_DATA[sum]);
});

console.log(NEW_DATASETS);
```

В результате выполнения кода будет выведен массив данных `NEW_DATASETS`, в котором каждый набор данных будет иметь добавленный цвет в зависимости от суммы его значений.
const result = DATASETS
  .map(n => [n, n.data.reduce((acc, m) => acc + m, 0)])
  .sort((a, b) => a[1] - b[1])
  .slice(-colors.length)
  .map((n, i, a) => ({ ...n[0], ...colors[a.length - i - 1] }));

//---

// Мы суммируем данные внутри каждого объекта в массиве DATASETS,
// затем сортируем массив по сумме в порядке возрастания,
// затем обрезаем массив до нужного количества элементов,
// затем добавляем цвета из массива colors в каждый объект
// в порядке, обратном отсортированному массиву.
const result = DATASETS.map(dataset => {
  const sum = dataset.data.reduce((a, b) => a + b, 0);
  return {
    ...dataset,
    sum
  };
})
.sort((a, b) => a.sum - b.sum)
.slice(-colors.length)
.map((dataset, index) => ({
  ...dataset,
  ...colors[colors.length - index - 1]
}));
Похожие вопросы