一尘不染

json对象的完整路径

algorithm

我正在尝试展平一个对象,其中键将是叶节点的完整路径。我可以递归地确定哪些是叶节点,但是在尝试构建整个路径时遇到了困难。

输入样例:

{
  一:1,
  二:{
    三:3
  },
  四:{
    5:5
    六:{
      七:7
    },
    八:8
  },
  9:9
}

输出:

{
  一:1,
  'two.three':3,
  “四五”:5
  “四六七”:7
  '四八':8,
  9:9
}

阅读 744

收藏
2020-07-28

共1个答案

一尘不染

您可以使用递归方法并收集对象的键。该建议还寻找数组。

function getFlatObject(object) {

    function iter(o, p) {

        if (o && typeof o === 'object') {

            Object.keys(o).forEach(function (k) {

                iter(o[k], p.concat(k));

            });

            return;

        }

        path[p.join('.')] = o;

    }



    var path = {};

    iter(object, []);

    return path;

}



var obj = { one: 1, two: { three: 3 }, four: { five: 5, six: { seven: 7 }, eight: 8 }, nine: 9 },

    path = getFlatObject(obj);



console.log(path);
2020-07-28