Задать вопрос
edkiimrgnl
@edkiimrgnl
человек с невидимыми талантами.

Как распределить элементы (объекты) массива в ОБЪЕКТ с объектами (не сортированными) по убывающей сумме данных из объектов ОБЪЕКТА?

const colors = [
    { primary: '#AAAAAA', secondary: '#AAABBB' },
    { primary: '#BBBBBB', secondary: '#BBBCCC' },
    { primary: '#CCCCCC', secondary: '#CCCDDD' },
    { primary: '#DDDDDD', secondary: '#DDDEEE' },
]; // ЦВЕТА ВСЕГДА В НУЖНОМ ПОРЯДКЕ

const DATASETS = [
    {
        data: [1, 2, 3, 4, 5],
    },
    {
        data: [2, 3, 4, 5, 6],
    },
    {
        data: [3, 4, 5, 6, 7],
    },
]; // МАССИВ МОЖЕТ БЫТЬ ОГРОМНЫМ, ДАННЫЕ ТОЖЕ

const OBJ_WITH_SUM_OF_VALUES_OF_DATA = {};

DATASETS.forEach((dataset, index) => {
    OBJ_WITH_SUM_OF_VALUES_OF_DATA[index] = dataset.data.reduce((a, b) => a + b, 0); // создаем объект с суммами данных, для понимания порядка убывания и распределения цветов (может быть есть решение лучше)
});

const NEW_OBJ_WITH_COLORS_ON_DATA = {
    // здесь должны быть объекты по типу => {
    //   OBJ_WITH_SUM_OF_VALUES_OF_DATA[index]: colors[НАИБОЛЬШЕЕ ЗНАЧЕНИЕ СУММЫ ПОЛУЧАЕТ ПЕРВЫЙ ЦВЕТ, ДАЛЬШЕ ПО УБЫВАНИЮ]
    // }
}; // то что не понятно

const NEW_DATASETS = DATASETS.map(dataset => {
    return {
        ...dataset,
        ...NEW_OBJ_WITH_COLORS_ON_DATA,
    };
}); /* нужный результат => [
    {
        data: [1, 2, 3, 4, 5],
        primary: '#CCCCCC',
        secondary: '#CCCDDD' 
    },
    {
        data: [2, 3, 4, 5, 6],
        primary: '#BBBBBB',
        secondary: '#BBBCCC'
    },
    {
        data: [3, 4, 5, 6, 7],
        primary: '#AAAAAA',
        secondary: '#AAABBB'
    },
]   
*/
  • Вопрос задан
  • 146 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Задача не очень понятна если честно. Так чтоли?
const sum = ({data}) => data.reduce((a, b) => a + b, 0);

const colors = [
  { primary: '#AAAAAA', secondary: '#AAABBB' },
  { primary: '#BBBBBB', secondary: '#BBBCCC' },
  { primary: '#CCCCCC', secondary: '#CCCDDD' },
  { primary: '#DDDDDD', secondary: '#DDDEEE' },
]; // ЦВЕТА ВСЕГДА В НУЖНОМ ПОРЯДКЕ

const DATASETS = [
  {
    data: [1, 2, 3, 4, 5],
  },
  {
    data: [2, 3, 4, 5, 6],
  },
  {
    data: [3, 4, 5, 6, 7],
  },
]; // МАССИВ МОЖЕТ БЫТЬ ОГРОМНЫМ, ДАННЫЕ ТОЖЕ

const NEW_DATASETS = DATASETS
  .map((dataset, index) => [sum(dataset), index]) // получаем соответствие суммы индексу
  .sort(([a],[b]) => b - a) // сортируем по сумме в обратном порядке
  .map(([,sortedIndex], index) => ({
    ...DATASETS[index],
    ...colors[sortedIndex]
  }));


Х.з. зачем такое может понадобится, если честно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
0xD34F
@0xD34F Куратор тега JavaScript
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] }));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы