【问题标题】:How can I compare two objects and reassign the second object only with the properties that are different from the first object?如何比较两个对象并仅使用与第一个对象不同的属性重新分配第二个对象?
【发布时间】:2021-03-08 08:20:21
【问题描述】:

这是我的第一个对象

const initialValues = {
  prenom: "anne",
  nom: "dupont",
  age: 24
}

这是我的第二个对象

const newValues = {
  prenom: "anne",
  nom: "duclos",
  age: 25
}

我想要的是在比较这两个对象时,newValues 将只包含与 initialValues 不同的属性。 它会返回:

newValues = {
  nom: "duclos",
  age: 25
}

到目前为止,我能做到的事情如下:

const initialValues = {
  prenom: "anne",
  nom: "dupont",
  age: 24
}
const newValues = {
  prenom: "anne",
  nom: "duclos",
  age: 25
}

function keepChangedValues(object1, object2) {
    
  const keys1 = Object.keys(object1);
  const keys2 = Object.keys(object2);


  for (let key of keys1) {
    if (object1[key] === object2[key]) {
       
        //delete this propreties from newValues
    }
  }
}
keppChangedValues(initialValues, newValues)

感谢您的帮助!

【问题讨论】:

  • 您的意思是要创建第三个对象,其属性与前两个对象不同?
  • 不完全是。我想保留 newValues 对象但更改他的属性。不创建第三个对象。不知道有没有可能。
  • 这能回答你的问题吗? JavaScript equivalent of jQuery's extend method
  • 所以你想delete newValues 中已经存在的所有属性在initialValues 中具有相同的值?
  • JSON.stringify(obj1) === JSON.stringify(obj2) 试试这个

标签: javascript object


【解决方案1】:

我找到了解决方案。我只需要在 if 语句中添加 delete object2[key]

这样,只有与第一个对象具有相同值的第二个对象的属性才会从第二个对象中删除。

【讨论】:

    【解决方案2】:

    如果你不知道对象属性,你可以添加这个:

    var newObject = {};
    if(newValues.prenom != initialValues.prenom) newValues.prenom = newValues.prenom;
    if(newValues.nom != initialValues.nom) newObject.nom = newValues.nom;
    if(newValues.age != initialValues.age) newObject.age = newValues.age;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      相关资源
      最近更新 更多