如何重写嵌套数组对象

时间:2019-03-25 14:25:07

标签: javascript jquery arrays object

我想知道如何覆盖对象数组中的值(如果存在),否则使用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"
}]

4 个答案:

答案 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>