JSFiddle - React, Tailwind, and code Playground

by brigand

JavaScript

const fulltree = {
    shark: {
      TEST: {
        test: {
          meta: {
            status: 'regular',
          },
          'multiple-run': {
            meta: {
              creator_user: 'gold',
            },
          },
        },
      },
    },
    octopus: {
      J212: {
        'F291-21': {
          meta: {
            status: 'regular',
          },
          'multiple-run': {
            meta: {
              creator_user: 'gold',
            },
          },
        },
      },
    },
  };
  
const isObject = (value) => value != null && typeof value === 'object';

const traversewrap = (rootObject) => {
  const result = [];

  const inner = (object, wrap) => {
    const keys = isObject(object) ? Object.keys(object) : [];
    // how to update meta here and omit it from path?
    if (keys.length === 0) {
      result.push(wrap);
    } else {
      for (const key of keys) {
        inner(object[key], {
          path: wrap.path.concat([key]),
          meta: object.meta ? {
           	...wrap.meta,
            ...object.meta,
          } : wrap.meta,
        });
      }
    }
  };
  
  inner(rootObject, {path:[], meta:{}});
  return result;
};

//console.log(traverse(fulltree));
console.log(traversewrap(fulltree));