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

Javascript 操作对象

Javascript 操作对象

墨色风雨 2022-12-18 16:27:54
希望有人能给我提示来解决我的问题。我有一个具有以下方案的给定对象:{  "prop1": value1,  "prop2": value2,  "nested1": [{A},{B}],  "nested2": [{C},{D}],  "nested3": [{E},{F}],}我想从我的原始对象中得到的是:{    items: [        {            "prop1": value1,            "prop2": value2,            "nested1": {A},            "nested2": {C},            "nested3": {E},        },        {            "prop1": value1,            "prop2": value2,            "nested1": {B},            "nested2": {D},            "nested3": {F},        },          ]}这与原始对象等属性items.length中的数组长度相同(本例中为 2)。我找不到使用 javascript 本机函数重构原始对象的可靠方法。任何帮助表示赞赏。nested1nested2
查看完整描述

4 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

我稍微修改了你的例子,并使用了字符串,以便有一个有效的对象。这将是一种方法:


const input = {

  prop1: "value1",

  prop2: "value2",

  nested1: ["A","B"],

  nested2: ["C","D"],

  nested3: ["E","F"],

};


const output = new Array(input.nested1.length).fill().map((_, i) => ({

    prop1: input.prop1,

    prop2: input.prop2,

    nested1: input.nested1[i],

    nested2: input.nested2[i],

    nested3: input.nested3[i]

}));


console.log(output);


查看完整回答
反对 回复 2022-12-18
?
翻阅古今

TA贡献1780条经验 获得超5个赞

如果您是初学者,那么您可以像这样简单地完成上述任务。


const input = {

  prop1: "value1",

  prop2: "value2",

  nested1: ["A","B"],

  nested2: ["C","D"],

  nested3: ["E","F"],

};


let arr1 ={

  prop1:input.prop1,

  prop2:input.prop2,

  nested1:input.nested1[0],

  nestend2:input.nested2[0],

  nested3:input.nested3[0],

}

let arr2 ={

  prop1:input.prop1,

  prop2:input.prop2,

  nested1:input.nested1[1],

  nestend2:input.nested2[1],

  nested3:input.nested3[1],

}


console.log({items:[arr1,arr2]});


查看完整回答
反对 回复 2022-12-18
?
qq_遁去的一_1

TA贡献1725条经验 获得超8个赞

使用map和解构


const convert = ({ nested1, nested2, nested3, ...rest }) => ({

  items: nested1.map((nested1, i) => ({

    ...rest,

    nested1,

    nested2: nested2[i],

    nested3: nested3[i],

  }))

});


const obj = {

  prop1: 'value1',

  prop2: 'value2',

  nested1: [{ 'A': 'a' }, { 'B': 'b' }],

  nested2: [{ 'C': 1 }, { 'D': 2 }],

  nested3: [{ 'E': 5 }, { 'F': 6 }],

};


console.log(convert(obj));


查看完整回答
反对 回复 2022-12-18
?
阿晨1998

TA贡献2037条经验 获得超6个赞

任意情况的通用解决方案


function buildItems(obj) {

  const commonPairs = Object.entries(obj).reduce(

    (accumulate, [key, val]) =>

      Array.isArray(val) ? accumulate : { ...accumulate, [key]: val },

    {}

  )

  const arrayPairs = Object.entries(obj).reduce(

    (accumulate, [key, val]) =>

      !Array.isArray(val) ? accumulate : { ...accumulate, [key]: val },

    {}

  )


  if (Object.keys(arrayPairs).length === 0) {

    return [{ ...commonPairs }]

  }


  const res = []

  for (let i = 0; i < arrayPairs[Object.keys(arrayPairs)[0]].length; i++) {

    res.push({

      ...commonPairs,

      ...Object.keys(arrayPairs).reduce(

        (acc, key) => ({ ...acc, [key]: arrayPairs[key][i] }),

        {}

      ),

    })

  }


  return res

}


console.log(

  "1)",

  buildItems({

    prop1: "value1",

    prop2: "value2",

    nested1: [{ A: 1 }, { B: 1 }, { G: 1 }],

    nested2: [{ C: 1 }, { D: 1 }, { H: 1 }],

    nested3: [{ E: 1 }, { F: 1 }, { I: 1 }],

    nested4: [{ J: 1 }, { K: 1 }, { L: 1 }],

    nested5: [{ M: 1 }, { N: 1 }, { O: 1 }],

  }),

  "\n"

)


console.log(

  "2)",

  buildItems({

    prop1: "value1",

    prop2: "value2",

  }),

  "\n"

)


console.log(

  "3)",

  buildItems({

    prop1: "value1",

    prop2: "value2",

    nested1: [{ A: 1 }, { B: 1 }, { G: 1 }],

  }),

  "\n"

)


查看完整回答
反对 回复 2022-12-18
  • 4 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号