Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新typescript中对象内部的嵌套对象_Javascript_Arrays_Typescript - Fatal编程技术网

Javascript 更新typescript中对象内部的嵌套对象

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

我正在寻找最佳解决方案,以更新角度中嵌套对象内的键值

我知道的解决方案是手动运行2个for循环并更新每个属性

下面是我已经尝试过的和我想要实现的

是否有任何选项可以避免运行2个循环

我想在循环中使用map选项,但没有得到我期望的结果

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表示您不想更改的所有其他属性。非常感谢。。。我正要在其中一个函数上使用它