我想知道如何覆盖对象数组中的值(如果存在),否则使用Javascript合并对象。
例如,targetAmount
在父对象中匹配,因此我需要覆盖匹配的值,而其余值只需插入父对象。
var my_obj = [{
description: "transferwise_description"
fee: "0.5"
id: "transferwise"
logo: "transferwiselogo.png"
name: "Transferwise"
speed: "1 Days"
targetAmount: "2000"
}]
var tomerge_obj = {
rate: 51.00674
source: "SGD"
sourceAmount: 1000
target: "INR"
targetAmount: 50688.97
type: "REGULAR"
}
预期产量
var merged_object = [{
description: "transferwise_description"
fee: "0.5"
id: "transferwise"
logo: "transferwiselogo.png"
name: "Transferwise"
speed: "1 Days"
rate: 51.00674
source: "SGD"
sourceAmount: 1000
target: "INR"
targetAmount: 50688.97
type: "REGULAR"
}]
答案 0 :(得分:2)
您可以使用Object.assign()
一行来完成。您可以在here上找到更多文档。
const result = Object.assign({}, my_obj[0], tomerge_obj);
答案 1 :(得分:0)
您可以通过以下方式简单地使用destructuring:
var merged_object = {...my_obj[0], ...tomerge_obj}
它将返回一个新对象,其中包含来自tomerge_obj
个重复键的值,这些值将替换my_obj
内部对象中的值。
您还可以使用Object.assign
并将两个对象分配给一个空对象,以达到相同的结果。
答案 2 :(得分:0)
var my_obj = [{
description: "transferwise_description",
fee: "0.5",
id: "transferwise",
logo: "transferwiselogo.png",
name: "Transferwise",
speed: "1 Days",
targetAmount: "2000"
}];
var tomerge_obj = {
rate: 51.00674,
source: "SGD",
sourceAmount: 1000,
target: "INR",
targetAmount: 50688.97,
type: "REGULAR"
};
my_obj[0] = {...my_obj[0], ...tomerge_obj};
console.log(my_obj);
my_obj[0] = {...my_obj[0], ...tomerge_obj};
'...'是spread operator,通常用于对象解构。
这实际上是通过散布两个对象的属性,用新创建的对象重新分配数组的第一个元素。
console.log将证明断言。
答案 3 :(得分:-1)
jQuery的extend
就在这里(回答这个问题是因为您标记了jQuery,它比assign
或散布运算符具有更广泛的浏览器支持)
请注意,它会修改原始对象,如果您不想使用,请使用var res = $.extend(true, {}, my_obj[0], tomerge_obj);
var my_obj= [
{
description: "transferwise_description",
fee: "0.5",
id: "transferwise",
logo: "transferwiselogo.png",
name: "Transferwise",
speed: "1 Days",
targetAmount: "2000",
}
];
var tomerge_obj = {
rate: 51.00674,
source: "SGD",
sourceAmount: 1000,
target: "INR",
targetAmount: 50688.97,
type: "REGULAR",
};
$.extend(true, my_obj[0], tomerge_obj)
console.log(my_obj);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>