嵌套对象深化

问题描述

我也有包含嵌套对象的数据。 例如,在演示值以下共享。

const input = {
  a: 'jack',b: {
    c: 'sparrow',d: 'hahaha'
  }
}

现在,我希望所有嵌套值都处于同一级别。这样。

const input = {
  a: 'jack',c: 'sparrow',d: 'hahaha'
}

我已经尝试过,但是输出错误

const getEntries = (o,prefix = '') => 
  Object.entries(o).flatMap(([k,v]) => 
    Object(v) === v  ? getEntries(v,`${prefix}${k}.`) : [ [`${prefix}${k}`,v] ]
  )

console.log(
  Object.fromEntries(getEntries(input))
)

output:-
{
a:"jack",b.c:"sparrow",b.d.e:"hahaha"
}

先感谢

解决方法

您可以区分问题的目的

  • 获取所有固定条目,
  • 返回条目对象。

getFlatEntries充当来自网络对象的递归,并返回键/值对的flatt数组。

getFlat取得一个对象,并从平面条目中返回所需的平面对象

const
    getFlatEntries = object => Object.entries(object).flatMap(([k,v]) => v && typeof v === 'object' ? getFlatEntries(v) : [[k,v]]),getFlat = object => Object.fromEntries(getFlatEntries(object))
    input = { a: 'jack',b: { c: 'sparrow',d: 'hahaha',e: { f: 'most inner' } } },flat = getFlat(input);

console.log(flat);

,

这应该有效

    const flattenObject = (ob) => {
    var toReturn = {};
    for (var i in ob) {
        if (!ob.hasOwnProperty(i)) continue;
        
        if ((typeof ob[i]) == 'object') {
            var flatObject = flattenObject(ob[i]);
            for (var x in flatObject) {
                if (!flatObject.hasOwnProperty(x)) continue;
                toReturn[x] = flatObject[x];
            }
        } else {
            toReturn[i] = ob[i];
        }
    }
    return toReturn
}
,
output = {}

function unnest_obj(new_obj,obj){
  for (let x in obj) {
    if(typeof obj[x] === "object") unnest_obj(new_obj,obj[x])
    
    else new_obj[x] = obj[x]
  }
}

unnest_obj(output,input)
//console.log(output)