Задать вопрос
@doctorcat

Как обрабатывать многоуровневые вложенные объекты/массивы?

Надо написать функцию, с возможностью распарсить объект любого уровня вложенности. Но проблема в том, что я хочу хранить полный путь для каждого из свойств. На момент открытия их значений. Ниже я приложил пример, с куском объекта которым работаю, так же моя функция работает на 3 уровня вложенности. выводит путь и потом значение в консоль. Но вот дальше, работать отказывается. И как её зациклить что бы работала до бесконечности я совершенно не пойму.

Если конкретней, моя функция неправильно работает обрабатывая вложенное свойство "stock", для него уже сбивается путь, что и можно увидеть в консоли.

https://jsfiddle.net/w5gy6ap0/
  • Вопрос задан
  • 506 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Рекурсия есть:

const objectParser = (data, path = '') =>
  Object.assign(
    { [path || '<root>']: data },
    ...(data instanceof Object
      ? Object.entries(data).map(([ k, v ]) => objectParser(v, `${path}[${k}]`))
      : []
    )
  );

Рекурсии нет:

function objectParser(data) {
  const result = {};

  for (const stack = [ [ data, '' ] ]; stack.length;) {
    const [ n, path ] = stack.pop();
    result[path || '<root>'] = n;
    (n instanceof Object) && Object
      .entries(n)
      .reverse()
      .forEach(([ k, v ]) => stack.push([ v, `${path}[${k}]` ]));
  }

  return result;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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