我想将右侧对象复制到左侧对象中,而右侧对象中没有复制属性。最后,我只想要左对象中存在的属性。我可以使用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" };
答案 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]),更有意义的是让对象更开心,并使用hasOwnProperty
或in
检查是否存在右边的匹配属性。我已更新代码以使用in
。 A 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);