如何压平一个json

var obj={
        a:1,
        b:{
            b1:2,
            b2:3
        },
        c:{
            c1:4,
            c2:{
                c21:5,
                c21:6
            }
        }
    };
    //写一个函数返回下列结果
    //return json={a:1,b.b1:2,b.b2:3,c.c1:4,c.c2.c21:5,c.c2.c22:6};

哪位大神知道这种数据结构怎么整,应该是用到递归,不过那个key值是怎么组出来的,帮帮忙,我现在想写一个方法碰到这种数据结构可以做扁平化处理

阅读 2.7k
3 个回答

看看这个

(刚刚写错了........)

function outerFn (param){
    var result = {}
    function fn (obj,prefix) {
      for (key in obj){
       let fullKey = prefix?(prefix+'.'+key):key;
        if (typeof obj[key]==='object'){
            fn(obj[key],fullKey)
        }else{
          result[fullKey] = obj[key]
        }
      }
    }
    fn(param)
    return result;
}
function fn(data) {
  const res = {};
  function _h(obj, p = '') {
    if (typeof obj === 'object' || obj === null)
      Object.keys(obj).forEach(key => _h(obj[key], p ? p + '.' + key : key));
    else res[p] = obj;
  }
  _h(data);
  return res;
}

楼上有点小问题, 我在他的基础上改了改

function outerFn (param){
    var result = {}
    function fn(obj, prefix) {
        for (key in obj) {
            let fullKey = prefix ? (prefix + '.' + key) : key;
            if (typeof obj[key] === 'object') {
                fn(obj[key], fullKey)
            } else {
                result[fullKey] = obj[key]
            }
        }
    }
    fn(param);
    return result;
}
推荐问题