Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.02.2020, 07:19
Аспирант
Отправить личное сообщение для gsdev99 Посмотреть профиль Найти все сообщения от gsdev99
 
Регистрация: 03.02.2019
Сообщений: 72

Как преобразовать данные?
Ребята, подскажите, пожалуйста, как преобразовать данные.
Исходные данные:
const widgets = [
    {
        type: "Title",
        data: {
            title: "title1",
            subTitle: "subTitle1"
        }
    },
    {
        type: "Title",
        data: {
            title: "title2",
            subTitle: "subTitle2"
        }
    },
    {
        type: "Title",
        data: {
            title: "title3",
            subTitle: "subTitle3"
        }
    },
    {
        type: "New",
        data: {
            title: "new title1",
            subTitle: "new subTitle1"
        }
    },
    {
        type: "New",
        data: {
            title: "new title2",
            subTitle: "new subTitle2"
        }
    },
    {
        type: "NewTitle",
        data: {
            title: "NewTitle title1",
            subTitle: "NewTitle subTitle1"
        }
    },
]

Данные которые необходимо получить (объединение одинаковых типов в массив):
const widgetsTransform = [
    {
        type: "SectionTitle",
        children: [
            {
                type: "Title",
                data: {
                    title: "title1",
                    subTitle: "subTitle1"
                }
            },
            {
                type: "Title",
                data: {
                    title: "title2",
                    subTitle: "subTitle2"
                }
            },
            {
                type: "Title",
                data: {
                    title: "title3",
                    subTitle: "subTitle3"
                }
            }
        ]
    },
    {
        type: "SectionNew",
        children: [
            {
                type: "New",
                data: {
                    title: "new title1",
                    subTitle: "new subTitle1"
                }
            },
            {
                type: "New",
                data: {
                    title: "new title2",
                    subTitle: "new subTitle2"
                }
            }
        ]
    },
    {
        type: "NewTitle",
        data: {
            title: "NewTitle title1",
            subTitle: "NewTitle subTitle1"
        }
    },
]
Ответить с цитированием
  #2 (permalink)  
Старый 19.02.2020, 08:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

gsdev99,
как формируется SectionTitle SectionNew NewTitle?
Ответить с цитированием
  #3 (permalink)  
Старый 19.02.2020, 08:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

gsdev99,
пока неизвестно, как формируется новое type, вариант такой
const widgets = [
    {
        type: "Title",
        data: {
            title: "title1",
            subTitle: "subTitle1"
        }
    },
    {
        type: "Title",
        data: {
            title: "title2",
            subTitle: "subTitle2"
        }
    },
    {
        type: "Title",
        data: {
            title: "title3",
            subTitle: "subTitle3"
        }
    },
    {
        type: "New",
        data: {
            title: "new title1",
            subTitle: "new subTitle1"
        }
    },
    {
        type: "New",
        data: {
            title: "new title2",
            subTitle: "new subTitle2"
        }
    },
    {
        type: "NewTitle",
        data: {
            title: "NewTitle title1",
            subTitle: "NewTitle subTitle1"
        }
    },
];

const create = arr => {
    const map = new Map;
    arr.forEach(o => {
        let {type, data} = o;
        //type = "Section" + type;
        if(map.has(type)) map.get(type).children.push(data);
        else map.set(type, {type, children : [data]})
    })
    return [...map.values()]
};
const widgetsTransform = create(widgets)
console.log(widgetsTransform)
Ответить с цитированием
  #4 (permalink)  
Старый 19.02.2020, 15:28
Аспирант
Отправить личное сообщение для gsdev99 Посмотреть профиль Найти все сообщения от gsdev99
 
Регистрация: 03.02.2019
Сообщений: 72

Спасибо. А если у меня задача преобразовать не все типы, а только определенные. Т.е., что я имею в виду.
В моем примере, я говорю, для типов Title и New, преобразование необходимо с сохранением своего расположения, как в исходном массиве, а остальные типы остаются с такой же структурой и в том же месте.
Исходный массив
const widgets = [
    {
        type: "Title",
        data: {
            title: "title1",
            subTitle: "subTitle1"
        }
    },
    {
        type: "Title",
        data: {
            title: "title2",
            subTitle: "subTitle2"
        }
    },
    {
        type: "Title",
        data: {
            title: "title3",
            subTitle: "subTitle3"
        }
    },
    {
        type: "TitleTwo",
        data: {
            title: "TitleTwo title",
            subTitle: "TitleTwo subTitle"
        }
    },
    {
        type: "TitleTwo",
        data: {
            title: "TitleTwo title",
            subTitle: "TitleTwo subTitle"
        }
    },
    {
        type: "New",
        data: {
            title: "new title1",
            subTitle: "new subTitle1"
        }
    },
    {
        type: "New",
        data: {
            title: "new title2",
            subTitle: "new subTitle2"
        }
    },
    {
        type: "NewTitle",
        data: {
            title: "NewTitle title1",
            subTitle: "NewTitle subTitle1"
        }
    },
    {
        type: "NewTitleTwo",
        data: {
            title: "NewTitleTwo title",
            subTitle: "NewTitleTwo subTitle"
        }
    }
]

Новое состояние:
const widgetsTransform = [
    {
        type: "SectionTitle",
        children: [
            {
                type: "Title",
                data: {
                    title: "title1",
                    subTitle: "subTitle1"
                }
            },
            {
                type: "Title",
                data: {
                    title: "title2",
                    subTitle: "subTitle2"
                }
            },
            {
                type: "Title",
                data: {
                    title: "title3",
                    subTitle: "subTitle3"
                }
            }
        ]
    },
    {
        type: "TitleTwo",
        data: {
            title: "TitleTwo title",
            subTitle: "TitleTwo subTitle"
        }
    },
    {
        type: "TitleTwo",
        data: {
            title: "TitleTwo title",
            subTitle: "TitleTwo subTitle"
        }
    },
    {
        type: "SectionNew",
        children: [
            {
                type: "New",
                data: {
                    title: "new title1",
                    subTitle: "new subTitle1"
                }
            },
            {
                type: "New",
                data: {
                    title: "new title2",
                    subTitle: "new subTitle2"
                }
            }
        ]
    },
    {
        type: "NewTitle",
        data: {
            title: "NewTitle title1",
            subTitle: "NewTitle subTitle1"
        }
    },
    {
        type: "NewTitleTwo",
        data: {
            title: "NewTitleTwo title",
            subTitle: "NewTitleTwo subTitle"
        }
    }
]
Ответить с цитированием
  #5 (permalink)  
Старый 19.02.2020, 16:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

gsdev99,
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">


</head>
<body>
<pre></pre>
<script>
const widgets = [
    {
        type: "Title",
        data: {
            title: "title1",
            subTitle: "subTitle1"
        }
    },
    {
        type: "Title",
        data: {
            title: "title2",
            subTitle: "subTitle2"
        }
    },
    {
        type: "Title",
        data: {
            title: "title3",
            subTitle: "subTitle3"
        }
    },
    {
        type: "TitleTwo",
        data: {
            title: "TitleTwo title",
            subTitle: "TitleTwo subTitle"
        }
    },
    {
        type: "TitleTwo",
        data: {
            title: "TitleTwo title",
            subTitle: "TitleTwo subTitle"
        }
    },
    {
        type: "New",
        data: {
            title: "new title1",
            subTitle: "new subTitle1"
        }
    },
    {
        type: "New",
        data: {
            title: "new title2",
            subTitle: "new subTitle2"
        }
    },
    {
        type: "NewTitle",
        data: {
            title: "NewTitle title1",
            subTitle: "NewTitle subTitle1"
        }
    },
    {
        type: "NewTitleTwo",
        data: {
            title: "NewTitleTwo title",
            subTitle: "NewTitleTwo subTitle"
        }
    }
];


const create = (arr, arrType) => {
    const map = new Map, newArr = [];
    arr.forEach(o => {
        let {type, data} = o;
        if(arrType.includes(type)) {
        type = `Section${type}`;
        if(map.has(type)) map.get(type).push(data);
        else {
        const children = [data];
        map.set(type, children);
        newArr.push({type, children})
        }
        }
        else newArr.push(o)
    })
    return newArr
};
const widgetsTransform = create(widgets, ["Title", "New"]);
document.querySelector("pre").append(JSON.stringify(widgetsTransform, "", 4));
console.log(widgetsTransform)
  </script>
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 19.02.2020, 16:47
Аспирант
Отправить личное сообщение для gsdev99 Посмотреть профиль Найти все сообщения от gsdev99
 
Регистрация: 03.02.2019
Сообщений: 72

Рони, большое тебе человеческое спасибо.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как из php файла передать данные в переменную javascript angelzzz Общие вопросы Javascript 36 01.07.2016 15:54
Как отправлять обновленные данные определенному .json файлу? ratatyq Node.JS 0 16.04.2016 15:06
как передавать данные из html? carder Общие вопросы Javascript 5 27.02.2016 19:46
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Контекстное меню как считать данные из таблицы xela1980 jQuery 25 31.05.2013 14:20