猿问

将嵌套数组覆盖到同一个对象中

我有一个这样的对象:


var state2 = {

    editValue0: "Australia123",

    editValue1: "Europe123",

    editValue2: "Asia123",

    editValue3: "Africa123",

    selectedQuestion: [

         {

            id: 1,

            options: [

                {

                    opt: "Australia"

                },

                {

                    opt: "Europe"

                },

                {

                    opt: "Asia"

                },

                {

                    opt: "Africa"

                }

            ]


        }

    ]

}

我希望 的值被opteditValue 的对应索引值替换,例如 options[0].opt is Australia,因此它应该替换 editvalue0 的值,依此类推。我尝试了以下,但错误来了:


state2.selectedQuestion[0].options.map(function(e,i){

Object.assign(state2.editValue0,e.opt)

})

请帮忙。提前致谢。


慕盖茨4494581
浏览 175回答 3
3回答

一只萌萌小番薯

您需要根据索引动态创建键,如果键对应的值存在,则需要替换该值。这可以在不使用spread syntax和改变状态的情况下实现Array.prototype.mapvar state = {    editValue0: "Australia123",    editValue1: "Europe123",    editValue2: "Asia123",    editValue3: "Africa123",    selectedQuestion: [         {            id: 1,            options: [                {                    opt: "Australia"                },                {                    opt: "Europe"                },                {                    opt: "Asia"                },                {                    opt: "Africa"                }            ]        }    ]}const newState = {    ...state,    selectedQuestion: state.selectedQuestion.map((data) => {        return {            ...data,            options: data.options.map((opt, i) => {               const key = `editValue${i}`;               return {                opt: state[key]? state[key]: opt.opt               }            })        }    })}console.log(newState);

莫回无

您可以forEach与索引一起使用来分配值:var state2 = {  editValue0: "Australia123",  editValue1: "Europe123",  editValue2: "Asia123",  editValue3: "Africa123",  selectedQuestion: [{    id: 1,    options: [{        opt: "Australia"      },      {        opt: "Europe"      },      {        opt: "Asia"      },      {        opt: "Africa"      }    ]  }]};state2.selectedQuestion[0].options.forEach((e, i) => {state2['editValue' + i] = e.opt;});console.log(state2);

皈依舞

使用 forEach 循环var state2 = {  editValue0: "Australia123",  editValue1: "Europe123",  editValue2: "Asia123",  editValue3: "Africa123",  selectedQuestion: [{    id: 1,    options: [{        opt: "Australia"      },      {        opt: "Europe"      },      {        opt: "Asia"      },      {        opt: "Africa"      }    ]  }]}state2.selectedQuestion.forEach(function(e){e.options.forEach(function(k,l){state2["editValue"+l]=k.opt;})})console.log(state2)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答