Javascript 如何合并两个JS对象

Javascript 如何合并两个JS对象,javascript,Javascript,我有一个JS对象,比如json 1 [ { "id": "123", "testname": "test123", "name": "John Doe", "active": true, "type": "test6" } { "id": "456", "testname": "test564", "name": "Ship Therasus",

我有一个JS对象,比如json 1

[
    {
        "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两个数组中的对象的顺序需要相同吗?