Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.04.2021, 18:50
Интересующийся
Отправить личное сообщение для dc65k Посмотреть профиль Найти все сообщения от dc65k
 
Регистрация: 19.05.2020
Сообщений: 27

Как оптимизировать преобразование данных в javascript?
Все привет.
У меня есть исходный массив:
const array = [
    {name: 'prop1', title: 'title1'},
    {name: 'prop2', title: 'title2'},
    {name: 'prop3', title: 'title3'},
    {name: 'prop1', title: 'title4'},
    {name: 'prop1', title: 'title5'},
]

Результат, который необходимо получить:
[
    {
        prop1: [
            {name: "prop1", title: "title1"},
            {name: "prop1", title: "title4"},
            {name: "prop1", title: "title5"}
        ]
    },
    {
        prop2: [
            {name: "prop2", title: "title2"}
        ],
    },
    {
        prop3: [
            {name: "prop3", title: "title3"}
        ]
    }
]

Моё решение:
function f(array) {
    const object = array.reduce((accumulator, currentValue) => {
        if (!accumulator[currentValue.name]) {
            accumulator[currentValue.name] = [];
        }

        accumulator[currentValue.name].push(currentValue);

        return accumulator;
    }, {});
    console.log('object', object);

    return Object.keys(object).reduce((accumulator, currentValue) => {
        accumulator.push({
            [currentValue]: object[currentValue]
        });

        return accumulator;
    }, []);
}

Подскажите, как оптимизировать данное решение? Пока, что, кажется, что можно сделать это преобразование, используя один цикл.

Последний раз редактировалось dc65k, 18.04.2021 в 18:54.
Ответить с цитированием
  #2 (permalink)  
Старый 18.04.2021, 19:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,763

dc65k,
<script>
const array  = [
    {name: 'prop1', title: 'title1'},
    {name: 'prop2', title: 'title2'},
    {name: 'prop3', title: 'title3'},
    {name: 'prop1', title: 'title4'},
    {name: 'prop1', title: 'title5'},
];

const f = a => a.reduce((a, b) => {
    let {name} = b;
    if (!a[name]) a.accumulator.push({[name]: a[name] = []});
    a[name].push(b);
    return a;
}, {accumulator: []}).accumulator;

let a = f(array);

document.write(`<pre>${JSON.stringify(a, "", 1)}</pre>`)
    </script>
Ответить с цитированием
  #3 (permalink)  
Старый 19.04.2021, 10:58
Интересующийся
Отправить личное сообщение для dc65k Посмотреть профиль Найти все сообщения от dc65k
 
Регистрация: 19.05.2020
Сообщений: 27

Спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как увеличить скорость загрузки javascript файлов Espey Элементы интерфейса 6 26.06.2017 23:28
Как работает валидация на JavaScript? Griin Общие вопросы Javascript 2 11.06.2017 16:07
JavaScript и отправка данных на сервер GGIceberg Общие вопросы Javascript 2 31.01.2017 23:10
Как научиться думать на javascript ? samuel Оффтопик 31 03.09.2013 01:10
Как работают операции сравнения > < == >= <= с различными типами данных? almac Общие вопросы Javascript 3 29.06.2012 13:07