Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как из одного массива с объектами сделать другой массив? (https://javascript.ru/forum/misc/83901-kak-iz-odnogo-massiva-s-obektami-sdelat-drugojj-massiv.html)

maplol123@gmail.com 16.04.2022 19:37

Как из одного массива с объектами сделать другой массив?
 
Здравствуйте, у меня парсятся данные с моей базы данных в таком формате:
[
	{
		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,
					},	
				],
			},
		],
	},
];

рони 16.04.2022 20:53

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>

maplol123@gmail.com 16.04.2022 23:12

рони,
Спасибо огромное!


Часовой пояс GMT +3, время: 03:53.