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

JavaScript从另一个对象更新对象值

JavaScript从另一个对象更新对象值

ibeautiful 2021-03-30 09:22:51
我有两个对象,一个用于更新另一个,类似于ETL Process。const currentObject = {    myObject : [      {        'attribute1':'foo1',        'attribute2':'bar1',        'attribute3':'test1'      },      {        'attribute1':'foo2',        'attribute2':'bar2',        'attribute3':'test2'      },      {       'attribute1':'foo3',       'attribute2':'bar3',       'attribute3':'test3'      },   ]}如果attribute3值为“ test1”,则转到另一个对象并检查test1属性,然后用新值替换currentObjectconst updateObject = {  myObject : {    'test1':'newtest1',    'test2':'newtest2',    'test3':'newtest3'  }}在currentObject attribute3上完成更新需要使用updateObject属性作为参考;其中currentObject attribute1 =“ test1”应该从updateObject test1复制数据,依此类推:最终值应类似于:const currentObject = {    myObject : [      {        'attribute1':'foo1',        'attribute2':'bar1',        'attribute3':'newtest1'      },      {        'attribute1':'foo2',        'attribute2':'bar2',        'attribute3':'newtest2'      },      {       'attribute1':'foo3',       'attribute2':'bar3',       'attribute3':'newtest3'      }   ]}
查看完整描述

3 回答

?
www说

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

您可以使用forEachObject.entries

这里的主意是

  • 首先循环遍历myObject数组中的每个元素currentObject

  • 现在,在你的结构你的价值currentObjectkeyupdateObject,所以我们通过检查是否存在updateObject.myObject[value]

  • 如果是他们,我们会更新,currentObject否则我们将其保持不变

const currentObject = {myObject : [{'attribute1':'foo1','attribute2':'bar1','attribute3':'test1'},{'attribute1':'foo2','attribute2':'bar2','attribute3':'test2'},{'attribute1':'foo3','attribute2':'bar3','attribute3':'test3'},]}

const updateObject = {myObject : {'test1':'newtest1','test2':'newtest2','test3':'newtest3'}}


currentObject.myObject.forEach(e => {


Object.entries(e).forEach(([key,value]) => {

    if(updateObject.myObject[value]){

      e[key] = updateObject.myObject[value]

    }

  })

})


console.log(currentObject)


查看完整回答
反对 回复 2021-04-08
?
开满天机

TA贡献1786条经验 获得超13个赞

这样就形成了具有最新JavaScript语言功能的单行代码:


const currentObject = {

  myObject: [

    {

      'attribute1': 'foo1',

      'attribute2': 'bar1',

      'attribute3': 'test1'

    },

    {

      'attribute1': 'foo2',

      'attribute2': 'bar2',

      'attribute3': 'test2'

    },

    {

      'attribute1': 'foo3',

      'attribute2': 'bar3',

      'attribute3': 'test3'

    },

  ]

}


const updateObject = {

  myObject: {

    'test1': 'newtest1',

    'test2': 'newtest2',

    'test3': 'newtest3'

  }

}


const result = { myObject: currentObject.myObject.map(o => ({ ...o, ...{ 'attribute3': updateObject.myObject[o.attribute3] } })) };


console.log(result);


查看完整回答
反对 回复 2021-04-08
?
斯蒂芬大帝

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

我们可以在中使用Array.reduce和搜索当前元素的(ele)attribute3属性updateObject.myObject。


如果存在,则使用其他中的匹配值对其进行更新,并updateObject.myObject保留旧的:


const currentObject = {myObject : [{'attribute1':'foo1','attribute2':'bar1','attribute3':'test1'},{'attribute1':'foo2','attribute2':'bar2','attribute3':'test2'},{'attribute1':'foo3','attribute2':'bar3','attribute3':'test3'},]};

const updateObject = {myObject : {'test1':'newtest1','test2':'newtest2','test3':'newtest3'}};


function transformObject(currentObject, updateObject){

    const out = currentObject.myObject.reduce((acc, ele) => {

       ele.attribute3 = updateObject.myObject[ele.attribute3] ?

                        updateObject.myObject[ele.attribute3] : 

                        ele.attribute3;

       return acc.concat(ele);

    }, []);

    finalObj = {[Object.keys(currentObject)[0]] : out };

    return finalObj;

}

console.log(transformObject(currentObject, updateObject));


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

添加回答

举报

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