Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   поиск элемента по критериям (https://javascript.ru/forum/events/8018-poisk-ehlementa-po-kriteriyam.html)

Wagner 03.03.2010 13:39

поиск элемента по критериям
 
итак, я получаю json объект со списком заданий. Укаждого задания есть его айди, текст, айди родительского задания (каждое задание может иметь подзадания)

необходимо выбрать все подзадания, принадлежащие некоторому подзаданию

sergdev 03.03.2010 13:49

перебор по jsonу (надеюсь, вы не сделали json вложенным ? в нем есть ограничение на вложенность), хитрый цикл
что то типа этого
var k = 0, child_tasks = [], looked_all = false;
while(true)
{
if (data[k].parentId = parentId)
{
child_tasks.push(k);
}
if (k == data.length) looked_all = true;
if (looked_all) break;
}

Kolyaj 03.03.2010 13:50

Цитата:

Сообщение от sergdev
надеюсь, вы не сделали json вложенным ? в нем есть ограничение на вложенность

Что за ограничения?

Wagner 03.03.2010 13:54

конечно-же не сделал. Циклом перебитать все элементы... Думал так сделать, но отказался, ибо долго. Элементов примерно 5к, а клиентские машины имеют камни 1.2 и мозгов 128мб. Может что-нибудь лучше есть?

sergdev 03.03.2010 13:54

Цитата:

Сообщение от Kolyaj (Сообщение 46648)
Что за ограничения?

Виноват, то у меня перепуталось с пхп :)
http://ua.php.net/json_decode
Цитата:

5.3.0 Added the optional depth . The default recursion depth was increased from 128 to 512
5.2.3 The nesting limit was increased from 20 to 128

sergdev 03.03.2010 13:56

Цитата:

Сообщение от Wagner (Сообщение 46649)
конечно-же не сделал. Циклом перебитать все элементы... Думал так сделать, но отказался, ибо долго. Элементов примерно 5к, а клиентские машины имеют камни 1.2 и мозгов 128мб. Может что-нибудь лучше есть?

Юзать deferred вычисления в джаваскрипте(если не важна скорость)(ссылку привести быстро не могу), либо делать запрос к серверу и возвращать айдишники тех элементов, которые нужны

Wagner 03.03.2010 14:01

Цитата:

Сообщение от sergdev (Сообщение 46651)
Юзать deferred вычисления в джаваскрипте(если не важна скорость)(ссылку привести быстро не могу), либо делать запрос к серверу и возвращать айдишники тех элементов, которые нужны

запрос к серверу каждый раз - долго слишком. может можно в getelementbytagname указать критерий поиска?

sergdev 03.03.2010 14:06

думаете перебрать 5000 элементов будет быстрей ?
очень сомневаюсь
из двух зол выберите меньшее
1. нагрузка на сервер в случае запроса к серверу
2. тормознутость страницы в случае с вычислениями без запросов к серверу.
конечно как идея, изменить формат вашего джсона, вы же как то его формируете : Добавить туда поле типа - child_ids
или на вашей странице запустить деферред вычисление и для каждого id найти все childы( и "закешировать" их в джсе).

Wagner 03.03.2010 14:10

у каждого объекта есть поле parent_id. От этого как-то можно оттолкнуться?

sergdev 03.03.2010 14:13

конечно, просто на сервере при формировании jsonа
каждому itemу присвойте еще одно поле child_ids : []
это будет массив с айдишниками детей.
как их вычислять ?
как пример
[{1:{
title:"dsad",
parent_id: 0,
child_ids : [2]
},
2: {
title: "dsadasdas",
parent_id:1
}
}]
упс видим что 2 - это ребенок 1 элемента добавляем в 1 след. поле
поняли ?


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