[英]update nested object inside object in typescript
我正在寻找更新 angular 中嵌套对象内的键值的最佳解决方案。
我知道的解决方案是手动运行 2 个 for 循环并更新每个属性。
以下是我尝试过的以及我想要实现的。
是否有任何选项可以避免最终运行 2 个循环?
我想在循环内使用 map 选项,但没有达到我的预期。
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 } ] } ] Result = obj1 = [ { "val":"type1", "removed":"N", "data":[ { "newlabel":"type1-a", "removed":"N", "newid":16, "extraparam1":null }, { "newlabel":"type1-b", "removed":"N", "newid":26, "extraparam1":null } ] }, { "val":"type2", "removed":"N", "data":[ { "newlabel":"type2-a", "removed":"N", "newid":12, "extraparam1":null }, { "newlabel":"type2-b", "removed":"N", "newid":34, "extraparam1":null } ] } ] obj1.forEach(val=>{ if(val.data){ //logic to modify the existing object } });
如果要保持主 object 不变。 你可以这样做:
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
}))
}
})
此方法将返回 object 的新干净副本。
但是如果你想更新 object。 你可以这样做:
obj1.forEach(val => {
if (val.data) {
val.data = val.data.map(({ label, dataid, ...rest }) => ({
...rest,
newlabel: label,
newid: dataid,
extraparam1: null
}))
}
});
尝试这个
obj1.map(data => ({label:data.label, dataid:data.dataid, removed:data.removed, param: null} ))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.