如何在javascript中用嵌套对象展平对象
我有一些来自父对象内部嵌套对象的属性,但我希望将嵌套对象与要展平的父对象合并 原始对象:如何在javascript中用嵌套对象展平对象,javascript,Javascript,我有一些来自父对象内部嵌套对象的属性,但我希望将嵌套对象与要展平的父对象合并 原始对象: 注册={ 用户:{ id:'字符串', 名称:“字符串” }, 完成:'布尔', 路径:“字符串” } 预期展平对象: 用户:{ id:'字符串', 名称:“字符串”, 完成:'布尔', 路径:“字符串” } 以下是一种快速而肮脏的展平对象的方法: var注册={ 用户:{ id:'字符串', 名称:“字符串”, }, 真的, 路径:false, }; var user=Object.assign(reg
注册={
用户:{
id:'字符串',
名称:“字符串”
},
完成:'布尔',
路径:“字符串”
}
预期展平对象:
用户:{
id:'字符串',
名称:“字符串”,
完成:'布尔',
路径:“字符串”
}
以下是一种快速而肮脏的展平对象的方法:
var注册={
用户:{
id:'字符串',
名称:“字符串”,
},
真的,
路径:false,
};
var user=Object.assign(registration.user);
user.fineshed=registration.fineshed;
user.path=enrollment.path;
对于没有共享键名且仅展平1级深度的两个警告的通用方法:
var注册={
用户:{
id:'字符串',
名称:“字符串”,
},
真的,
路径:false,
};
常数展平=(对象)=>{
让值={};
for(对象中的var属性){
if(对象的类型[属性]=“对象”){
for(对象[属性]中的var p){
值[p]=对象[属性][p];
}
}否则{
值[属性]=对象[属性];
}
}
返回值;
};
让用户=展平(注册);
console.log(用户)代码>以下是一种快速而肮脏的展平对象的方法:
var注册={
用户:{
id:'字符串',
名称:“字符串”,
},
真的,
路径:false,
};
var user=Object.assign(registration.user);
user.fineshed=registration.fineshed;
user.path=enrollment.path;
对于没有共享键名且仅展平1级深度的两个警告的通用方法:
var注册={
用户:{
id:'字符串',
名称:“字符串”,
},
真的,
路径:false,
};
常数展平=(对象)=>{
让值={};
for(对象中的var属性){
if(对象的类型[属性]=“对象”){
for(对象[属性]中的var p){
值[p]=对象[属性][p];
}
}否则{
值[属性]=对象[属性];
}
}
返回值;
};
让用户=展平(注册);
console.log(用户)代码>只需要一个对象:
const注册={
用户:{
id:'字符串',
名称:“字符串”
},
完成:'布尔',
路径:“布尔”
}
函数propsToUser(enrollObj){
常量u={…enrollObj.user};
对于(让我加入OBJ){
如果(i!=='user')u[i]=enrollObj[i];
}
返回u;
}
const user=propsToUser(注册);
console.log(用户)代码>只需要一个对象:
const注册={
用户:{
id:'字符串',
名称:“字符串”
},
完成:'布尔',
路径:“布尔”
}
函数propsToUser(enrollObj){
常量u={…enrollObj.user};
对于(让我加入OBJ){
如果(i!=='user')u[i]=enrollObj[i];
}
返回u;
}
const user=propsToUser(注册);
console.log(用户)代码>您可以递归地构建任意数量的嵌套对象。因此,此函数不依赖于您的大小写:
var注册={
用户:{
id:'字符串',
名称:“字符串”
},
完成:'布尔',
路径:“布尔”
}
变量注册2={
用户:{
id:'字符串',
名称:“字符串”
},
测试:{
测试1:{
测试2:{
val0:'val0',
test4:{//3级嵌套对象,例如
val1:‘val1’,
val2:‘val2’
}
}
}
},
完成:'布尔',
路径:“布尔”
}
常数平坦=(obj,out)=>{
Object.keys(obj.forEach)(key=>{
如果(对象的类型[键]=“对象”){
out=flat(obj[key],out)//递归调用嵌套
}否则{
out[key]=obj[key]//直接赋值
}
})
返回
}
log(平面(注册,{}))
log(flat(enrollment2,{}))
您可以递归地构建任意数量的嵌套对象。因此,此函数不依赖于您的大小写:
var注册={
用户:{
id:'字符串',
名称:“字符串”
},
完成:'布尔',
路径:“布尔”
}
变量注册2={
用户:{
id:'字符串',
名称:“字符串”
},
测试:{
测试1:{
测试2:{
val0:'val0',
test4:{//3级嵌套对象,例如
val1:‘val1’,
val2:‘val2’
}
}
}
},
完成:'布尔',
路径:“布尔”
}
常数平坦=(obj,out)=>{
Object.keys(obj.forEach)(key=>{
如果(对象的类型[键]=“对象”){
out=flat(obj[key],out)//递归调用嵌套
}否则{
out[key]=obj[key]//直接赋值
}
})
返回
}
log(平面(注册,{}))
log(flat(enrollment2,{}))
我需要一些可以避免重写原始对象中不同级别的同名键的东西。所以我写了以下内容:
const flattobject=(obj,parentKey='')=>{
如果(parentKey!='')parentKey+='';
设平坦={};
Object.keys(obj.forEach)((key)=>{
if(对象[键]==='object'&&obj[键]!==null的类型){
赋值(展平,展平对象(obj[key],parentKey+key))
}否则{
展平[parentKey+key]=obj[key]
}
})
返回平直;
}
var测试={
福:“酒吧”,
有些是‘东西’,
父亲:{
son1:‘son1值’,
儿子2:{
孙辈:“孙辈价值”,
duplicatedKey:“注意这也用于第一级”,
},
},
duplicatedKey:“注意,这也在son2中使用”,
}
放平=放平物体(试验);
控制台。原木(平);
//如何访问展开的关键点:
让a=扁平[‘父子二孙’];
控制台日志(a)代码>我需要一些可以避免用s重写键的东西
{
name:'Namig',
surname:'Hajiyev',
address:{
city:'Sumgait',
country:'Azerbaijan',
geo: {
lat:'40.5897200',
long:'49.6686100'
}
}
}
{
"name": "Namig",
"surname": "Hajiyev",
"address.city": "Sumgait",
"address.country": "Azerbaijan",
"address.geo.lat": "40.5897200",
"address.geo.long": "49.6686100"
}