jQuery扩展覆盖对象并创建重复

时间:2016-08-06 14:39:13

标签: javascript jquery arrays

我有两个数组,我想从array1扩展array2来获取 “值”。

但是,extend也会覆盖另一个对象,从而创建一个副本。

enter link description here

  var array1 = [{
attributeId: 2,
attributeName: "ToolOutput",
values: [
  "tool output value"
]
  }, {
attributeId: 4,
attributeName: "AggregationLevel",
values: [
  "aggregation level value"
]
  }];

  var array2 = [{
attributeId: 1,
attributeName: "DataToolsUsage",
values: []
  }, {
attributeId: 2,
attributeName: "ToolOutput",
values: []
  }, {
attributeId: 3,
attributeName: "ConnectedTo",
values: []
  }, {
attributeId: 4,
attributeName: "AggregationLevel",
values: []
  }];

  var newArray = $.extend({},array2, array1);

var printed = "result[0] is : <br> " + JSON.stringify(newArray[0]);
printed = printed + "<br><br> result[1] is : <br> " + JSON.stringify(newArray[1])
printed = printed + "<br><br> result[2] is : <br> " + JSON.stringify(newArray[2])
printed = printed + "<br><br> result[3] is : <br> " + JSON.stringify(newArray[3])
  
document.write(printed);

您可以在结果中看到两个“AggregationLevel”对象。并删除“DataToolsUsage”

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你需要像这样$.extend({}, array1, array2)调用extend。第一个空对象是要存储扩展array1和array2结果的目标对象。如果未提供目标参数,则array1将被视为目标对象,因此会覆盖这些值。有关扩展的详细信息,请参阅https://api.jquery.com/jquery.extend/

答案 1 :(得分:0)

$.extend不适合这样的任务。您有两个对象的数组,其中包含一些自定义标识符字段。因此,如果要合并数组,则应迭代其所有项并手动填充结果数组。使用像underscore这样的库可以更轻松地完成它,但根本没有必要。