存在于可用键对象中的合并2数组将删除对象的特定属性

时间:2018-01-22 02:57:17

标签: javascript arrays

我有2个对象 a b ,它们都包含数组。 我想合并每个对象中存在的数组,并形成一个新对象,包括数组和文本节点。

我的代码: -

  var a = {
            name1:[1,2],
            name2:[3],
            name3:'alisha',
            name4:'japan'
          };

   var b = {
            name1:[4],
            name2:[5,6],
            name3:'hello alisha!!'
          };


 newobject = function (obj1, obj2) {
       var obj3 = {};
       for (var attrname in obj1) {
         obj3[attrname] = obj1[attrname];
       }
       for (var attrname in obj2) {
         obj3[attrname] = obj2[attrname];
       }
        return obj3;
 };

 console.log(newobject(a,b))

我想做什么: -

我有2个对象 a & b ,可能包含不同的数据以及类似的数据。如果两个对象具有相同的属性,我想混合数组中的数据。如果对象的属性是一个字符串,我想用** b **对象相同的属性更新它。

输出可能不准确,但它提供了100%的提示来解决此问题

输出我想要: -

  {
        name1:[1,2,4],
        name2:[3,5,6],
        name3:'hello alisha!',
        name4:'japan'
  }

请不要使用jquery

3 个答案:

答案 0 :(得分:2)

如果它确实是您要合并的上述示例,那么以下内容将为您完成。

我不知道您的情况是否重要,但您可能还想考虑处理a.name1stringb.name1为{{1}的情况等等。



array




答案 1 :(得分:1)

您也可以轻松扩展以检查其他类型,例如object等。

var a = {
  name1:[1,2],
  name2:[3],
  name3:'alisha',
  name4:'japan'
};

var b = {
  name1:[4],
  name2:[5,6],
  name3:'hello alisha!!',
  name5:'new name'
};

function merge(a, b) {
  var c = Object.keys(a).reduce(function(acc, key) {
    if(!(key in b)) {
      acc[key] = a[key]
    } else if(Array.isArray(a[key]) && Array.isArray(b[key])) {
      acc[key] = a[key].concat(b[key])
    } else {
      acc[key] = b[key]
    }
    return acc
  }, {})

  c = Object.keys(b).reduce(function(acc, key) {
    if(!(key in acc)) {
      acc[key] = b[key]
    }
    return acc
  }, c)
  return c
}

var d = merge(a, b)

答案 2 :(得分:1)

var a = {
     name1: [1, 2],
     name2: [3],
     name3: 'alisha',
     name4: 'japan'
    };
var b = {
     name1: [4],
     name2: [5, 6],
    name3: 'hello alisha!!'
    };

function mergeObjects(a, b) {
  for (var key in b) {
 a[key] = (Array.isArray(a[key])) ? a[key].concat(b[key]) : b[key];
  }
 return a;
   }

console.log(mergeObjects(a, b));