Javascript 更新typescript中对象内部的嵌套对象
我正在寻找最佳解决方案,以更新角度中嵌套对象内的键值 我知道的解决方案是手动运行2个for循环并更新每个属性 下面是我已经尝试过的和我想要实现的 是否有任何选项可以避免运行2个循环 我想在循环中使用map选项,但没有得到我期望的结果Javascript 更新typescript中对象内部的嵌套对象,javascript,arrays,typescript,Javascript,Arrays,Typescript,我正在寻找最佳解决方案,以更新角度中嵌套对象内的键值 我知道的解决方案是手动运行2个for循环并更新每个属性 下面是我已经尝试过的和我想要实现的 是否有任何选项可以避免运行2个循环 我想在循环中使用map选项,但没有得到我期望的结果 obj1=[ { “val”:“type1”, “已删除”:“N”, “数据”:[ { “标签”:“类型1-a”, “已删除”:“N”, “数据ID”:16 }, { “标签”:“类型1-b”, “已删除”:“N”, “数据ID”:26 } ] }, { “val
obj1=[
{
“val”:“type1”,
“已删除”:“N”,
“数据”:[
{
“标签”:“类型1-a”,
“已删除”:“N”,
“数据ID”:16
},
{
“标签”:“类型1-b”,
“已删除”:“N”,
“数据ID”:26
}
]
},
{
“val”:“type2”,
“已删除”:“N”,
“数据”:[
{
“标签”:“类型2-a”,
“已删除”:“N”,
“数据ID”:12
},
{
“标签”:“类型2-b”,
“已删除”:“N”,
“数据ID”:34
}
]
}
]
结果=
obj1=[
{
“val”:“type1”,
“已删除”:“N”,
“数据”:[
{
“新标签”:“类型1-a”,
“已删除”:“N”,
“newid”:16岁,
“extraparam1”:空
},
{
“新标签”:“类型1-b”,
“已删除”:“N”,
“newid”:26,
“extraparam1”:空
}
]
},
{
“val”:“type2”,
“已删除”:“N”,
“数据”:[
{
“新标签”:“类型2-a”,
“已删除”:“N”,
“newid”:12,
“extraparam1”:空
},
{
“新标签”:“类型2-b”,
“已删除”:“N”,
“newid”:34岁,
“extraparam1”:空
}
]
}
]
obj1.forEach(val=>{
如果(val.data){
//修改现有对象的逻辑
}
});代码>如果要保留主对象而不进行更改。您可以这样做:
const obj1 = [
{
"val":"type1",
"removed":"N",
"data":[
{
"label":"type1-a",
"removed":"N",
"dataid":16
},
{
"label":"type1-b",
"removed":"N",
"dataid":26
}
]
},
{
"val":"type2",
"removed":"N",
"data":[
{
"label":"type2-a",
"removed":"N",
"dataid":12
},
{
"label":"type2-b",
"removed":"N",
"dataid":34
}
]
}]
;
let result = obj1.map(({ data, ...values }) => {
return {
...values,
data: data.map(({ label, dataid, ...rest }) => ({
...rest,
newlabel: label,
newid: dataid,
extraparam1: null
}))
}
})
obj1.forEach(val => {
if (val.data) {
val.data = val.data.map(({ label, dataid, ...rest }) => ({
...rest,
newlabel: label,
newid: dataid,
extraparam1: null
}))
}
});
这种方法将返回对象的新的干净副本
但是如果你想更新对象。您可以这样做:
const obj1 = [
{
"val":"type1",
"removed":"N",
"data":[
{
"label":"type1-a",
"removed":"N",
"dataid":16
},
{
"label":"type1-b",
"removed":"N",
"dataid":26
}
]
},
{
"val":"type2",
"removed":"N",
"data":[
{
"label":"type2-a",
"removed":"N",
"dataid":12
},
{
"label":"type2-b",
"removed":"N",
"dataid":34
}
]
}]
;
let result = obj1.map(({ data, ...values }) => {
return {
...values,
data: data.map(({ label, dataid, ...rest }) => ({
...rest,
newlabel: label,
newid: dataid,
extraparam1: null
}))
}
})
obj1.forEach(val => {
if (val.data) {
val.data = val.data.map(({ label, dataid, ...rest }) => ({
...rest,
newlabel: label,
newid: dataid,
extraparam1: null
}))
}
});
如果要保留主对象而不进行更改。您可以这样做:
const obj1 = [
{
"val":"type1",
"removed":"N",
"data":[
{
"label":"type1-a",
"removed":"N",
"dataid":16
},
{
"label":"type1-b",
"removed":"N",
"dataid":26
}
]
},
{
"val":"type2",
"removed":"N",
"data":[
{
"label":"type2-a",
"removed":"N",
"dataid":12
},
{
"label":"type2-b",
"removed":"N",
"dataid":34
}
]
}]
;
let result = obj1.map(({ data, ...values }) => {
return {
...values,
data: data.map(({ label, dataid, ...rest }) => ({
...rest,
newlabel: label,
newid: dataid,
extraparam1: null
}))
}
})
obj1.forEach(val => {
if (val.data) {
val.data = val.data.map(({ label, dataid, ...rest }) => ({
...rest,
newlabel: label,
newid: dataid,
extraparam1: null
}))
}
});
这种方法将返回对象的新的干净副本
但是如果你想更新对象。您可以这样做:
const obj1 = [
{
"val":"type1",
"removed":"N",
"data":[
{
"label":"type1-a",
"removed":"N",
"dataid":16
},
{
"label":"type1-b",
"removed":"N",
"dataid":26
}
]
},
{
"val":"type2",
"removed":"N",
"data":[
{
"label":"type2-a",
"removed":"N",
"dataid":12
},
{
"label":"type2-b",
"removed":"N",
"dataid":34
}
]
}]
;
let result = obj1.map(({ data, ...values }) => {
return {
...values,
data: data.map(({ label, dataid, ...rest }) => ({
...rest,
newlabel: label,
newid: dataid,
extraparam1: null
}))
}
})
obj1.forEach(val => {
if (val.data) {
val.data = val.data.map(({ label, dataid, ...rest }) => ({
...rest,
newlabel: label,
newid: dataid,
extraparam1: null
}))
}
});
试试这个
obj1.map(数据=>({label:data.label,dataid:data.dataid,removed:data.removed,param:null}))
试试这个
obj1.map(数据=>({label:data.label,dataid:data.dataid,removed:data.removed,param:null}))
它是如何遍历所有对象的?它是如何遍历所有对象的?如果我有10个额外的属性,我是否需要编写每个属性?有没有其他方法可以避免再次写入所有属性?这些额外属性将从何而来?每个data.element都将相同?否,这是外部对象属性,如val和removed。请查看我的编辑。现在您可以看到一个({label,dataid,…rest})
,它只是解构label和dataid,因为您想更改对象键,…rest表示您不想更改的所有其他属性。非常感谢。。。我正要在其中一个函数上使用它如果我有10个额外的属性,我需要写每个属性吗?有没有其他方法可以避免再次写入所有属性?这些额外属性将从何而来?每个data.element都将相同?否,这是外部对象属性,如val和removed。请查看我的编辑。现在您可以看到一个({label,dataid,…rest})
,它只是解构label和dataid,因为您想更改对象键,…rest表示您不想更改的所有其他属性。非常感谢。。。我正要在其中一个函数上使用它