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