如何在不使用Javascript或jQuery添加属性的情况下将对象的属性复制到另一个对象?

时间:2017-12-07 20:48:26

标签: javascript jquery

我想将右侧对象复制到左侧对象中,而右侧对象中没有复制属性。最后,我只想要左对象中存在的属性。我可以使用JavaScript和jQuery

var left = { "id": "123" };
var right = { "id": "456", "no": "false" };

$.each(left, function (l1_key, l1Value) {
  if (typeof l1Value === 'object') {
    const left_l2 = left[l1_key];
    const right_l1_properties = right[l1_key]; 
    $.each(left_l2, function (l2_key, l2Value) {
      l2Value = right_l1_properties[l2_key];
    });
  }
});

左需要:

{ "id": "456" };

2 个答案:

答案 0 :(得分:2)

只需迭代左对象中的所有属性,检查右对象中是否存在该键,并将左键值设置为右键值。



var left = { "id": "123" }; var right = { "id": "456", "no": "false" };

for (var prop in left){
  if(prop in right) {
    left[prop] = right[prop];
  }
};

console.log(left);




不需要jQuery。

编辑:而不是使用if(右[prop]),更有意义的是让对象更开心,并使用hasOwnPropertyin检查是否存在右边的匹配属性。我已更新代码以使用inA discussion on in vs hasOwnProperty.

答案 1 :(得分:0)

您可以使用Object.getOwnPropertyNames()left上的Array.forEach来迭代left属性数组。这样,您就可以排除不匹配的right属性。完整的逻辑在下面的代码段中实现。



function changeMatchingProps(left, right) {
if (typeof left === 'object' && typeof right === 'object') {
Object.getOwnPropertyNames(left).forEach(function (val, idx, array) {
    if(right.hasOwnProperty(val)) {
          left[val] = right[val];
    }
});
}
}
var left = { "id": "123" };
var right = { "id": "456", "no": "false" };
changeMatchingProps(left, right);
console.log(left);
var left = { "id": "123", "no": "false", "yes": "true" };
var right = { "id": "456", "no": "true" };
changeMatchingProps(left, right);
console.log(left);
var left = { "id": "123", "pid": "" };
var right = { "id": "456", "no": "false", "pid": "afd39cb123df" };
changeMatchingProps(left, right);
console.log(left);
var left = { "id": "123" };
var right = {};
changeMatchingProps(left, right);
console.log(left);