@madved

Как сделать перебор вложенных объектов JS?

Есть куча объектов в цепочке вложений может быть свойство с нужным значением.

objN: {
    id: "nameN",
    keyN: val,
    ...,
    nextSibling: {
        keyN: val,
        ...,
        parentNode: {
            id: "nameN",
            keyN: val,
            ...,
            nextSibling: {
                keyN: val,
                ...,
                parentNode: {
                    id: "ИСКОМОЕ ИМЯ"
                    keyN: val,
                    ...,
                }
            }
        }
    }
}


"ИСКОМОЕ ИМЯ" может находиться на разной глубине от объекта к объекту. Как видите проверять id надо не на каждом уровне, а через один "nextSibling". Также перебор может упереться в nextSibling: null, и "ИСКОМОЕ ИМЯ" будет не найдено, в таком случае объект не подходит.

Если интересно, то эти объекты выдаёт SVGLoader фреймворка threejs, а этот перебор это поиск svg путей находящихся в группе "ИСКОМОЕ ИМЯ".

У меня к сожалению нехватает знаний это переварить.
  • Вопрос задан
  • 434 просмотра
Решения вопроса 1
@StockholmSyndrome
function getNestedObj(obj, id) {
  while (obj && obj.id !== id) {
    obj = obj.nextSibling ? obj.nextSibling.parentNode : null;
  }
  return obj;
}

console.log(getNestedObj(objN, 'ИСКОМОЕ ИМЯ'));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Admitad Projects Москва
от 170 000 до 240 000 ₽
Fundraise Up Санкт-Петербург
от 2 500 до 3 500 $
от 5 000 до 6 500 $
31 мая 2020, в 14:11
1000 руб./за проект
31 мая 2020, в 13:31
50000 руб./за проект
31 мая 2020, в 13:31
7000 руб./за проект