繁体   English   中英

Javascript从另一个对象向一个对象添加元素

[英]Javascript add elements to an object from another object

我有一个对象。 data对象中的第一个元素如下所示:

data[0] = {name:"Bob", model:"Tesla", color:"white"};

第二个对象,其第一个元素如下所示:

new_data[0] = {salary:"50000", age:"34"};

datanew_data的长度相同,并且new_data对象内部的每个元素都需要附加到相关的data对象上,以进行如下操作:

data[0] = {name:"Bob", model:"Tesla", color:"white", salary:"50000", age:"34"};

我之前使用过concat将元素添加到单个行对象(var

people = ["Dan","Bob"];
people.concat("Mike");

,但是相同的想法在这里行不通:

for ( var i = 0;i<data.length; i++ ) {
   data[i] = data[i].concat(new_data[i]);
}

我该如何遍历呢?

MDN

Object.assign()方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。 它将返回目标对象。

我该如何遍历呢?

考虑到Object.assign() ,我们可以像下面这样遍历它:

 var data = []; data[0] = {name:"Bob", model:"Tesla", color:"white"}; data[1] = {name:"Martin", model:"Ford", color:"Blue"}; data[2] = {name:"Danny", model:"BMW", color:"Purple"}; var new_data =[]; new_data[0] = {salary:"50000", age:"34"}; new_data[1] = {salary:"45000", age:"24"}; new_data[2] = {salary:"10000", age:"39"}; for(var i = 0; i < data.length; i++){ data[i] = Object.assign(data[i], new_data[i]); console.log(data[i]); } 

因此,您已经用jQuery标记了您的问题,我在下面使用了它的$.extend()方法( jQuery Documentation )。

这只是针对您的情况的一种衬板解决方案。 通过将true传递给此方法,您可以轻松地将对象2递归合并到对象1中。 jQuery很聪明地找出了两个对象都是相同长度的数组,因此输出是一个数组,结果数组中的每个项目都是两个对象的合并结果。

Object.assign是相当新的(ES6),可能并非在所有浏览器中都受支持( Source )。 但是这种jQuery方式可以为支持所有浏览器节省时间。

 var collection1 = [{ name: "Bob", model: "Tesla", color: "white" }, { name: "Bob 1", model: "Tesla 1", color: "white 1" } ]; var collection2 = [{ salary: "50000", age: "34" }, { salary: "50001", age: "35" } ]; var result = $.extend(true, collection1, collection2); console.log(result); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 

您可以使用jQuery.extend函数,如下所示。 它使用new_data[i]对象的属性扩展现有的data[i] new_data[i]对象。

for ( var i = 0; i<data.length; i++ ) {
   jQuery.extend(data[i], new_data[i]);
}

最有效的方法是遍历new_data中的每个元素并将其应用于data

for(var key in new_data[0]){
  data[0][key] = new_data[0][key];
}

如果Object.assign这样,您需要使用什么:

for ( var i = 0;i < data.length; i++ ) {
  Object.assign(data[i], new_data[i]);
}

这将改变data的内容。

concat用于数组。 它将在另一个结尾处附加一个(或多个)数组。

let people = ["Dan","Bob"];
people.concat(["Mike"]); // people is now ["Dan", "Bob", "Mike"]

您可以利用对象之一的键来合并两个对象。 这在IE9及更高版本中也适用。 如果需要防止覆盖基础对象中的属性,则可以在分配forEach调用之前为该键添加快速的真实检查。

 var obj1 = {id:1, name: "bob"} var obj2 = {dob: "2000101"}; Object .keys(obj1) .forEach(function(k){ obj2[k] = obj1[k]; }); console.log(obj2); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM