@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 путей находящихся в группе "ИСКОМОЕ ИМЯ".

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

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

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

Похожие вопросы