В контексте веб-приложения у меня есть сервер, который отправляет или получает строки JSON на основе входных данных от клиента.При использовании клиента эти строки JSON немедленно преобразуются в объекты JavaScript, где они будут жить как объекты.Эти объекты не являются массивами;они представляют собой сложные произвольные модели данных, каждое свойство которых может иметь произвольное количество уникальных подвойств или объектов.
var myView = {
name: 'root'
id: 'root_0'
children: {
child_1: {
arbitraryid: 'root_0_child_1',
type: 'Department',
name: 'Produce',
quadrant: 1,
children: {
child_1: {
arbitraryid: 'root_0_child_1_child_1',
type: 'Aisle',
number: 3,
length: 12,
children: { }
}
}
},
child_2: {
arbitraryid: 'root_0_child_2',
name: 'West',
type: 'Region',
children: {
child_1: {
arbitraryid: 'root_0_child_2_child_1',
name: 'Wegmans',
type: 'Store',
children: {
child_1: {
arbitraryid: 'root_0_child_2_child_1_child_1',
type: 'Department',
children: { }
}
}
}
}
}
}
};
Когда я создаю серверную строку JSON, я гарантирую, что у всех объектов будут дочерние объектыи произвольные свойства;но все остальное генерируется динамически, а свойства и значения совершенно произвольны.
Если бы это был XML, я мог бы использовать jQuery для var someChild = myView.find('#root_0_child_1_child_1')
.Это даст мне объект jQuery с результатами поиска AND не только ссылкой на myView, но и позицией , из которой можно перемещаться всенаправленно через объект: var someChild = myView.find('#root_0_child_1_child_1').parent()
.
Существует ли утилита для решения этой проблемы для нативных объектов JavaScript или есть предпочтительный способ / методология для этого?Я хотел бы избежать написания кода такого типа, чтобы просто получить доступ к моему свойству, а затем потенциально повторить цикл для обновления родительского объекта.
while (obj.hasOwnProperty('children')) {
for (var child in obj) {
//..etc, etc
}
}
Большинство вопросов SO, которые я вижу по этой теме, имеют дело с поисковыми массивами , , часто с предсказуемым построением стиля таблицы данных .
Картирование возможно, но эти объекты быстро становятся глубже, и этот вариант кажется немного лучше, чем тупое зацикливание.
Идеи?
Редактировать: сворачивание моего собственного служебного класса.
I 'Я до сих пор изучаю другие библиотеки / утилиты, но я написал общий вспомогательный класс для поиска:
ObjectHelper
Хотя он полезен, я думаю, что он иллюстрирует некоторые трудности сполучить в другой jQuery-подобной функциональности.Я хотел бы не только выполнять поиск, но и иметь возможность сканировать структуру свойств объекта вверх / вниз аналогично тому, как вы можете связывать операторы .parent (). Children (). Find () вместе.Выполнимо, но сложно.