Как из многомерного обьекта, составить новый обьект из вложенных ключей

Рейтинг: 0Ответов: 1Опубликовано: 04.04.2023
/// из этого
const tree = {
    a: {
        b: {
            c: 'one',
            h: 'two',
        },
        d: {
            f: 'three',
        },
        g: 'four',
    },
}

/// сделать вот такой обьект

// {
//   'a.b.c': 'one',
//   'a.b.h': 'two',
//   'a.d.f': 'three',
//     'a.g': 'four'
// }
// понаписал, но не пойму как остановиться на последней вложенности и собрать обьект заново
let a = {}
let b = ''
function getTreeValues(tree) {
    for (let key in tree) {
        if (typeof (tree[key]) == "object") {
            b += `${key}.`
            getTreeValues(tree[key]);
        } else {
            b += key
            a[b] = tree[key]
        }
    }
    // return a
};
console.log(getTreeValues(tree))
console.log(a)

Ответы

▲ 1

const tree = {
  a: {
    b: {
      c: 'one',
      h: 'two',
    },
    d: {
      f: 'three',
    },
    g: 'four',
  },
}

function getTreeValues(tree, result = {}, path = '') {
  for (let key in tree) {
    const resultKey = path ? `${path}.${key}` : key;
    if (typeof(tree[key]) == "object") {
      result = getTreeValues(tree[key], result, resultKey);
    } else {
      result[resultKey] = tree[key];
    }
  }
  return result;
};

console.log(getTreeValues(tree))