问题描述
我也有包含嵌套对象的数据。 例如,在演示值以下共享。
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)