powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Алгоритм преобразования линейного массива в многомерный и наоборот
5 сообщений из 5, страница 1 из 1
Алгоритм преобразования линейного массива в многомерный и наоборот
    #38254100
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посоветуйте быстрый алгоритм, который из такого массива:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
[
    {id: 1, pid: false},
    {id: 2, pid: false},
    {id: 3, pid: 5},
    {id: 4, pid: 5},
    {id: 5, pid: 2}
]


сделает такой:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
[
    {id: 1, child: false},
    {id: 2, child:
        [
            {id: 5, child:
                [
                    {id: 4, child: false},
                    {id: 3, child: false}
                [
            }
        ]
    }
]


и наоборот
...
Рейтинг: 0 / 0
Алгоритм преобразования линейного массива в многомерный и наоборот
    #38254138
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2,

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
arr = [
    {id: 1, pid: 0},
    {id: 2, pid: 0},
    {id: 3, pid: 5},
    {id: 4, pid: 5},
    {id: 5, pid: 2}
];
temp = {};
temp[0]={id: 0, child: []};
for (i in arr){
    temp[arr[i]['id']]={id:arr[i]['id'], child: []};
}
for (i in arr){
    temp[arr[i]['pid']].child.push(temp[arr[i]['id']]);
}
res = temp[0];



res - нужный массив... это преобразование с одномерного в многомерный на js. В обратную сторону ещё не придумал :)
...
Рейтинг: 0 / 0
Алгоритм преобразования линейного массива в многомерный и наоборот
    #38254139
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Единственное отличие от требуемого варианта - это все пустые child равны не false, а пустому массиву []
...
Рейтинг: 0 / 0
Алгоритм преобразования линейного массива в многомерный и наоборот
    #38254160
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр, спасибо! Буду курить) Сам делал рекурсией, а тут что-то новое. Вместо false можно [] использовать. Не принципиально
...
Рейтинг: 0 / 0
Алгоритм преобразования линейного массива в многомерный и наоборот
    #38254179
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2Програмёр, спасибо! Буду курить) Сам делал рекурсией, а тут что-то новое. Вместо false можно [] использовать. Не принципиально

упс... только сейчас заметил... сорри, не проверил код после добавления строки res = temp[0]. Данную строку надо заменить на res=temp[0].child.

А так в принципе тут всё просто. Как мы знаем, объекты передаются по ссылкам. Тут обычная хитрость, я записываю объекты в один одномерный массив по их id, а потом просто начинаю вкладывать один в другой (при этом делаю это через одномерный массив, поэтому без рекурсий и кучи проходов по одному и тому же).
То есть, элементы temp[5] и temp[2].child[0] указывают на тот же объект и temp[5].child.push() равносильно temp[2].child[0].child.push, только более линейно, быстрее и легче.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Алгоритм преобразования линейного массива в многомерный и наоборот
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]