Я создал библиотеку для обхода и редактирования глубоко вложенных объектов JS. Проверьте API здесь: https://github.com/dominik791
Вы также можете поиграть с библиотекой в интерактивном режиме, используя демонстрационное приложение:
https://dominik791.github.io/obj-traverse-demo/
Примеры использования:
У вас всегда должен быть корневой объект, который является первым параметром каждого метода:
var rootObj = {
name: 'rootObject',
children: [
{
'name': 'child1',
children: [ ... ]
},
{
'name': 'child2',
children: [ ... ]
}
]
};
Вторым параметром всегда является имя свойства, которое содержит вложенные объекты. В приведенном выше случае это будет 'children'
.
Третий параметр - это объект, который вы используете для поиска объекта / объектов, которые вы хотите найти / изменить / удалить. Например, если вы ищете объект с идентификатором, равным 1, вы передадите { id: 1}
в качестве третьего параметра.
И вы можете:
findFirst(rootObj, 'children', { id: 1 })
чтобы найти первый объект
с id === 1
findAll(rootObj, 'children', { id: 1 })
чтобы найти все объекты
с id === 1
findAndDeleteFirst(rootObj, 'children', { id: 1 })
для удаления первого соответствующего объекта
findAndDeleteAll(rootObj, 'children', { id: 1 })
для удаления всех подходящих объектов
replacementObj
используется в качестве последнего параметра в двух последних методах:
findAndModifyFirst(rootObj, 'children', { id: 1 }, { id: 2, name: 'newObj'})
для изменения первого найденного объекта с id === 1
на { id: 2, name: 'newObj'}
findAndModifyAll(rootObj, 'children', { id: 1 }, { id: 2, name: 'newObj'})
для изменения всех объектов с id === 1
на { id: 2, name: 'newObj'}