鍍金池/ 問答/HTML/ 如何壓平一個(gè)json

如何壓平一個(gè)json

var obj={
        a:1,
        b:{
            b1:2,
            b2:3
        },
        c:{
            c1:4,
            c2:{
                c21:5,
                c21:6
            }
        }
    };
    //寫一個(gè)函數(shù)返回下列結(jié)果
    //return json={a:1,b.b1:2,b.b2:3,c.c1:4,c.c2.c21:5,c.c2.c22:6};

哪位大神知道這種數(shù)據(jù)結(jié)構(gòu)怎么整,應(yīng)該是用到遞歸,不過那個(gè)key值是怎么組出來的,幫幫忙,我現(xiàn)在想寫一個(gè)方法碰到這種數(shù)據(jù)結(jié)構(gòu)可以做扁平化處理

回答
編輯回答
壞脾滊

樓上有點(diǎn)小問題, 我在他的基礎(chǔ)上改了改

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;
}
2017年6月27日 14:42
編輯回答
朽鹿

看看這個(gè)

(剛剛寫錯(cuò)了........)

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;
}
2018年7月6日 03:44
編輯回答
傲寒
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;
}
2018年9月10日 17:27