为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕盖茨4494581 2021-08-26 16:51:38
我有一个这样的对象: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)})请帮忙。提前致谢。
查看完整描述

3 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

您需要根据索引动态创建键,如果键对应的值存在,则需要替换该值。这可以在不使用spread syntax和改变状态的情况下实现Array.prototype.map


var 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);


查看完整回答
反对 回复 2021-08-26
?
莫回无

TA贡献1865条经验 获得超7个赞

您可以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);


查看完整回答
反对 回复 2021-08-26
?
皈依舞

TA贡献1851条经验 获得超3个赞

使用 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)


查看完整回答
反对 回复 2021-08-26
  • 3 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信