Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.04.2022, 19:37
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

Как из одного массива с объектами сделать другой массив?
Здравствуйте, у меня парсятся данные с моей базы данных в таком формате:
[
	{
		id: 1,
		name: ["bag", "first hand", "first adding"],
		style: 0,
		adding: 0,
	},
	{
		id: 2,
		name: ["bag", "first hand", "second adding"],
		style: 0,
		adding: 1,
	},
	{
		id: 3,
		name: ["sac", "first hand", "first adding"],
		style: 0,
		adding: 0,
	}
];

Можно ли как-то этот массив переделать в массив с таким форматом?
[
	{
		name: "bag",
		sec_name: [
			{
				name: "first hand",
				sec_name: [
					{
						name: "first adding",
						id: 1,
						style: 0,
						adding: 0,
					},
					{
						name: "second adding",
						id: 2,
						style: 0,
						adding: 1,
					},
				],
			},
		],
	},
	{
		name: "sac",
		sec_name: [
			{
				name: "first hand",
				sec_name: [
					{
						name: "first adding",
						id: 3,
						style: 0,
						adding: 0,
					},	
				],
			},
		],
	},
];
Ответить с цитированием
  #2 (permalink)  
Старый 16.04.2022, 20:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

maplol123@gmail.com,
<script>
        let data = [{
                id: 1,
                name: ["bag", "first hand", "first adding"],
                style: 0,
                adding: 0,
            },
            {
                id: 2,
                name: ["bag", "first hand", "second adding"],
                style: 0,
                adding: 1,
            },
            {
                id: 3,
                name: ["sac", "first hand", "first adding"],
                style: 0,
                adding: 0,
            }
        ];
        let findName = (key, arr) => arr.find(({
            name
        }) => name === key);

        let createArr = data => data.reduce((arr, ob) => {
            let item = arr,
                name,
                last = ob.name.pop();
            for (name of ob.name) {
                let obj = findName(name, item)
                if (!obj) {
                    obj = {
                        name,
                        sec_name: []
                    }
                    item.push(obj)
                }
                item = obj.sec_name
            }
            ob.name = last;
            item.push(ob)
            return arr

        }, [])
        let arr = createArr(data)
        document.write(`<pre>${JSON.stringify(arr, "", 1)}</pre>`)
    </script>
Ответить с цитированием
  #3 (permalink)  
Старый 16.04.2022, 23:12
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как в цыкле вывести массив в html и сделать selected его нулевой eлемент с помощью js jobananada Общие вопросы Javascript 9 11.06.2019 14:29
Константный массив, как приватное поле класса AndreyMG Общие вопросы Javascript 0 13.05.2016 17:31
Как сделать что бы при открытии блока, вместе с ним двигался другой блок(стрелки)? freeman0204 Общие вопросы Javascript 2 21.02.2016 15:15
Как сделать клик по ссылке с другой ссылки или div ? ilyas-> Элементы интерфейса 15 01.08.2013 12:49
Как сделать разделителем у массива ";" вместо "," FRIE Общие вопросы Javascript 4 16.08.2011 15:21