Javascript 如何合并两个JS对象
我有一个JS对象,比如json 1Javascript 如何合并两个JS对象,javascript,Javascript,我有一个JS对象,比如json 1 [ { "id": "123", "testname": "test123", "name": "John Doe", "active": true, "type": "test6" } { "id": "456", "testname": "test564", "name": "Ship Therasus",
[
{
"id": "123",
"testname": "test123",
"name": "John Doe",
"active": true,
"type": "test6"
}
{
"id": "456",
"testname": "test564",
"name": "Ship Therasus",
"active": true,
"type": "test7"
}
.... some 100 entries
]
json 2如下所示
[
{
"id": "123",
"country": "USA",
"state": "KA",
"age": 24,
"group": "g1"
}
{
"id": "456",
"country": "UK",
"state": "MA",
"age": 28,
"group": "G2"
}
...... 100 entries
]
现在Id是json1和json2之间的常量,我想创建一个结果对象,如下所示,让我们调用json3。我想匹配id,从json2获取国家和州,并附加到json 1中。如何使用JavaScript实现这一点
[
{
"id": "123",
"testname": "test123",
"name": "John Doe",
"active": true,
"type": "test6",
"country":"USA",
"state":"KA"
}
{
"id": "456",
"testname": "test564",
"name": "Ship Therasus",
"active": true,
"type": "test7",
"country":"UK",
"state":"MA"
}
]
如果您使用的是jQuery,可以这样做:
var json1 = [{id:1, one: 1}, {id:2, one: 2}];
var json2 = [{id:1, two: 1}, {id:2, two: 2}];
var merged = $.map(json1, function(v1, i) {
var result = $.extend({}, v1);
var v2s = $.grep(json2, function(v2) {
return v2.id === v1.id;
});
for (var i = v2s.length - 1; i >= 0; i--) {
$.extend(result, v2s[i]);
};
return result;
});
非jQuery版本:
var merged = [];
for (var i = json1.length - 1; i >= 0; i--) {
var v1 = json1[i];
var result = {};
for (var key in v1) {
if (v1.hasOwnProperty(key)) {
result[key] = v1[key];
}
}
for (var j = json2.length - 1; j >= 0; j--) {
var v2 = json2[j];
if (v1.id === v2.id) {
for (var key in v2) {
if (v2.hasOwnProperty(key)) {
result[key] = v2[key];
}
}
}
}
merged.push(result);
};
如果您使用的是jQuery,可以这样做:
var json1 = [{id:1, one: 1}, {id:2, one: 2}];
var json2 = [{id:1, two: 1}, {id:2, two: 2}];
var merged = $.map(json1, function(v1, i) {
var result = $.extend({}, v1);
var v2s = $.grep(json2, function(v2) {
return v2.id === v1.id;
});
for (var i = v2s.length - 1; i >= 0; i--) {
$.extend(result, v2s[i]);
};
return result;
});
非jQuery版本:
var merged = [];
for (var i = json1.length - 1; i >= 0; i--) {
var v1 = json1[i];
var result = {};
for (var key in v1) {
if (v1.hasOwnProperty(key)) {
result[key] = v1[key];
}
}
for (var j = json2.length - 1; j >= 0; j--) {
var v2 = json2[j];
if (v1.id === v2.id) {
for (var key in v2) {
if (v2.hasOwnProperty(key)) {
result[key] = v2[key];
}
}
}
}
merged.push(result);
};
如果您使用的是jQuery,可以这样做:
var json1 = [{id:1, one: 1}, {id:2, one: 2}];
var json2 = [{id:1, two: 1}, {id:2, two: 2}];
var merged = $.map(json1, function(v1, i) {
var result = $.extend({}, v1);
var v2s = $.grep(json2, function(v2) {
return v2.id === v1.id;
});
for (var i = v2s.length - 1; i >= 0; i--) {
$.extend(result, v2s[i]);
};
return result;
});
非jQuery版本:
var merged = [];
for (var i = json1.length - 1; i >= 0; i--) {
var v1 = json1[i];
var result = {};
for (var key in v1) {
if (v1.hasOwnProperty(key)) {
result[key] = v1[key];
}
}
for (var j = json2.length - 1; j >= 0; j--) {
var v2 = json2[j];
if (v1.id === v2.id) {
for (var key in v2) {
if (v2.hasOwnProperty(key)) {
result[key] = v2[key];
}
}
}
}
merged.push(result);
};
如果您使用的是jQuery,可以这样做:
var json1 = [{id:1, one: 1}, {id:2, one: 2}];
var json2 = [{id:1, two: 1}, {id:2, two: 2}];
var merged = $.map(json1, function(v1, i) {
var result = $.extend({}, v1);
var v2s = $.grep(json2, function(v2) {
return v2.id === v1.id;
});
for (var i = v2s.length - 1; i >= 0; i--) {
$.extend(result, v2s[i]);
};
return result;
});
非jQuery版本:
var merged = [];
for (var i = json1.length - 1; i >= 0; i--) {
var v1 = json1[i];
var result = {};
for (var key in v1) {
if (v1.hasOwnProperty(key)) {
result[key] = v1[key];
}
}
for (var j = json2.length - 1; j >= 0; j--) {
var v2 = json2[j];
if (v1.id === v2.id) {
for (var key in v2) {
if (v2.hasOwnProperty(key)) {
result[key] = v2[key];
}
}
}
}
merged.push(result);
};
注意:如果您确实喜欢jQuery 使用$.extend()可以将一个或多个对象合并到第一个对象中。有许多方法可以使用$.extend()解决不同的场景。您的匹配项与下面的匹配项相匹配,其中有两个具有某些公共和不同属性的对象。当您想将它们合并到一个对象中,同时也希望两个对象的所有不常见属性都存在时,您需要这样做
var firstData = [
{
"id": "123",
"testname": "test123",
"name": "John Doe",
"active": true,
"type": "test6"
},
{
"id": "456",
"testname": "test564",
"name": "Ship Therasus",
"active": true,
"type": "test7"
}
];
var secondData = [
{
"id": "123",
"country": "USA",
"state": "KA",
"age": 24,
"group": "g1"
},
{
"id": "456",
"country": "UK",
"state": "MA",
"age": 28,
"group": "G2"
}
];
// This will remove the properties that you don't want to be in the merged object
$.each(secondData, function(index, object){
$.each(object, function(key, value){
if(key == "age"){
delete secondData[index][key];
}
else if(key == "group"){
delete secondData[index][key];
}
});
});
// this is to merge the objects
$.extend(true, firstData, secondData);
// check your console
console.log(firstData);
.extend()所做的是合并两个对象并将其保留在第一个对象中。第一个参数true指定将递归合并对象
参考资料:注意:如果您确实喜欢jQuery 使用$.extend()可以将一个或多个对象合并到第一个对象中。有许多方法可以使用$.extend()解决不同的场景。您的匹配项与下面的匹配项相匹配,其中有两个具有某些公共和不同属性的对象。当您想将它们合并到一个对象中,同时也希望两个对象的所有不常见属性都存在时,您需要这样做
var firstData = [
{
"id": "123",
"testname": "test123",
"name": "John Doe",
"active": true,
"type": "test6"
},
{
"id": "456",
"testname": "test564",
"name": "Ship Therasus",
"active": true,
"type": "test7"
}
];
var secondData = [
{
"id": "123",
"country": "USA",
"state": "KA",
"age": 24,
"group": "g1"
},
{
"id": "456",
"country": "UK",
"state": "MA",
"age": 28,
"group": "G2"
}
];
// This will remove the properties that you don't want to be in the merged object
$.each(secondData, function(index, object){
$.each(object, function(key, value){
if(key == "age"){
delete secondData[index][key];
}
else if(key == "group"){
delete secondData[index][key];
}
});
});
// this is to merge the objects
$.extend(true, firstData, secondData);
// check your console
console.log(firstData);
.extend()所做的是合并两个对象并将其保留在第一个对象中。第一个参数true指定将递归合并对象
参考资料:注意:如果您确实喜欢jQuery 使用$.extend()可以将一个或多个对象合并到第一个对象中。有许多方法可以使用$.extend()解决不同的场景。您的匹配项与下面的匹配项相匹配,其中有两个具有某些公共和不同属性的对象。当您想将它们合并到一个对象中,同时也希望两个对象的所有不常见属性都存在时,您需要这样做
var firstData = [
{
"id": "123",
"testname": "test123",
"name": "John Doe",
"active": true,
"type": "test6"
},
{
"id": "456",
"testname": "test564",
"name": "Ship Therasus",
"active": true,
"type": "test7"
}
];
var secondData = [
{
"id": "123",
"country": "USA",
"state": "KA",
"age": 24,
"group": "g1"
},
{
"id": "456",
"country": "UK",
"state": "MA",
"age": 28,
"group": "G2"
}
];
// This will remove the properties that you don't want to be in the merged object
$.each(secondData, function(index, object){
$.each(object, function(key, value){
if(key == "age"){
delete secondData[index][key];
}
else if(key == "group"){
delete secondData[index][key];
}
});
});
// this is to merge the objects
$.extend(true, firstData, secondData);
// check your console
console.log(firstData);
.extend()所做的是合并两个对象并将其保留在第一个对象中。第一个参数true指定将递归合并对象
参考资料:注意:如果您确实喜欢jQuery 使用$.extend()可以将一个或多个对象合并到第一个对象中。有许多方法可以使用$.extend()解决不同的场景。您的匹配项与下面的匹配项相匹配,其中有两个具有某些公共和不同属性的对象。当您想将它们合并到一个对象中,同时也希望两个对象的所有不常见属性都存在时,您需要这样做
var firstData = [
{
"id": "123",
"testname": "test123",
"name": "John Doe",
"active": true,
"type": "test6"
},
{
"id": "456",
"testname": "test564",
"name": "Ship Therasus",
"active": true,
"type": "test7"
}
];
var secondData = [
{
"id": "123",
"country": "USA",
"state": "KA",
"age": 24,
"group": "g1"
},
{
"id": "456",
"country": "UK",
"state": "MA",
"age": 28,
"group": "G2"
}
];
// This will remove the properties that you don't want to be in the merged object
$.each(secondData, function(index, object){
$.each(object, function(key, value){
if(key == "age"){
delete secondData[index][key];
}
else if(key == "group"){
delete secondData[index][key];
}
});
});
// this is to merge the objects
$.extend(true, firstData, secondData);
// check your console
console.log(firstData);
.extend()所做的是合并两个对象并将其保留在第一个对象中。第一个参数true指定将递归合并对象
引用:如果您可以依赖匹配的数组索引,您可以简单地将这两个数组作为第三个数组中的元素,并使用下划线的
.zip
函数或实现类似的功能。两个数组的元素顺序是否相同?如果您可以依赖匹配的数组索引,您可以简单地将这两个数组作为元素放置在第三个数组中,并使用下划线的.zip
函数或实现类似的功能。两个数组的元素顺序是否相同?如果您可以依赖匹配的数组索引,您可以简单地将这两个数组作为元素放置在第三个数组中,并使用下划线的.zip
函数或实现类似的功能。两个数组的元素顺序是否相同?如果您可以依赖匹配的数组索引,您可以简单地将这两个数组作为元素放置在第三个数组中,并使用下划线的.zip
函数或实现类似的功能。两个数组的元素顺序是否相同?OP希望使用Javascript而不是jQueryDo两个数组中的对象顺序是否相同?OP希望使用Javascript而不是jQueryDo两个数组中的对象顺序是否相同?OP希望使用Javascript而不是jQueryDo两个数组中的对象顺序是否相同?OP想要使用Javascript而不是jQueryDo两个数组中的对象的顺序需要相同吗?