合并javascript中具有不同属性数的两个数组

合并javascript中具有不同属性数的两个数组,javascript,arrays,Javascript,Arrays,我有两个javascript数组,它们的属性数不同,如下所示 阵列1 数组2 我想合并这两个数组,并根据日期创建一个数组。 结果数组应如下所示 var resultArray = [{ 'name': 'A', 'date': "May-31-2012", 'value1': 56, 'value2': 26 }, { 'name': 'A', 'date': "Jun-05-2014", 'value1': 36, 'valu

我有两个javascript数组,它们的属性数不同,如下所示

阵列1

数组2

我想合并这两个数组,并根据日期创建一个数组。 结果数组应如下所示

var resultArray = [{
    'name': 'A',
    'date': "May-31-2012",
    'value1': 56,
    'value2': 26
  }, {
    'name': 'A',
    'date': "Jun-05-2014",
    'value1': 36,
    'value2' :0
  },{
    'name': 'A',
    'date': "Jun-05-2015",
    'value1': 0,
    'value2' :78
  }, {
    'name': 'A',
    'date': "Nov-28-2015",
    'value1': 29,
    'value2': 560
  }, {
    'name': 'A',
    'date': "Dec-01-2016",
    'value1': 0,
    'value2' : 56
  },{
    'name': 'A',
    'date': "Dec-01-2016",
    'value1': 0,
    'value2' : 56
  },{
    'name': 'A',
    'date': "Dec-04-2016",
    'value1': 0,
    'value2' : 56
  }];
请提出建议。

这将对您有所帮助

 var resultArray = arrFirst.concat(arrSecond);

您可以使用非给定属性的默认值创建新对象,迭代给定数据,并使用哈希表为同一日期赋值

然后按日期对结果数组进行排序

var arrFirst=[{name:'A',日期:2012年5月31日,value1:56},{name:'A',日期:2014年6月5日,value1:36},{name:'A',日期:2015年11月28日,value1:29},{name:'A',日期:2017年12月1日,value1:58}], ARRSHOND=[{日期:2012年5月31日,价值2:26},{日期:2015年6月5日,价值2:78},{日期:2015年11月28日,价值2:560},{日期:2016年12月1日,价值2:56},{日期:2016年4月4日,价值2:36}], 合并=[arrFirst,arrSecond]。还原函数哈希{ 返回函数r,a{ a、 foreacho函数{ 如果!散列[o.date]{ hash[o.date]={date:o.date,name:'A',value1:0,value2:0}; r、 pushhash[o.date]; } Object.keyso.foreachk函数{ 散列[o.date][k]=o[k]; }; }; 返回r; }; }Object.createnull,[]; merged.sort函数a、b{ 函数getISODates{ 变量月份={1月1日、2月2日、3月3日、4月4日、5月5日、6月6日、7月7日、8月8日、9月9日、10月10日、11月11日、12月12日}; 返回s.slice7,11+'-'+月[s.slice0,3]+'-'+s.slice4,6; } 返回getISODatea.date.localeComparegetISODateb.date; }; console.logmerged;
.作为控制台包装{最大高度:100%!重要;顶部:0;}您可以使用下面的函数合并2个数组

     var arrFirst = [{
    'name': 'A',
    'date': "May-31-2012",
    'value1': 56
  }, {
    'name': 'A',
    'date': "Jun-05-2014",
    'value1': 36
  }, {
    'name': 'A',
    'date': "Nov-28-2015",
    'value1': 29
  }, {
    'name': 'A',
    'date': "Dec-01-2017",
    'value1': 58
  }];
    var arrSecond = [{
    'date': "May-31-2012",
    'value2': 26
  }, {
    'date': "Jun-05-2015",
    'value2': 78
  }, {
    'date': "Nov-28-2015",
    'value2': 560
  }, {
    'date': "Dec-01-2016",
    'value2': 56
  }, {
    'date': "Dec-04-2016",
    'value2': 36
  }];

function mergeArrays(arr1, arr2) {
            var a1 = [];
            if(arr1 && arr2) {
                if(arr1.length >= arr2.length) {
                  arr1.forEach(function(e, k, i) {
                    a1.push(k);
                    a1[k] = [];
                    a1[k] = merge(e, arrSecond[k]);
                  });
                } else {
                  arr2.forEach(function(e, k, i) {
                    a1.push(k);
                    a1[k] = [];
                    a1[k] = merge(e, arrFirst[k]);
                  });
                }
            } else {
                if(arr1) {
                a1 = arr1;
              }
              if(arr2) {
                a1 = arr2;
              }
            }
            return a1;
        }

function merge(arr1, arr2) {
    if(arr1 && arr2) {
    return Object.assign(arr1, arr2);
  } else {
    if(arr1) {
        return arr1;
    } 
    if(arr2) {
    return arr2;
    }
  }
}

console.log(mergeArrays(arrFirst, arrSecond));
然后将这两个数组放入mergeArraysarrFirst、arrSecond等合并数组中;它会给你合并的结果

你可以在这里看到现场演示


希望这对你有所帮助

分享你的研究对每个人都有帮助。告诉我们您尝试了什么,以及为什么它不能满足您的需求。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!还要看看是否由我决定,我会使用日期作为“键”,迭代两个数组来创建一个新数组,并用正确的属性填充数组。是否可以使用javascript日期对象?可以将这些数据进行比较,以获得后一个日期。这将比排序那些字符串少很多工作。
 var resultArray = arrFirst.concat(arrSecond);
     var arrFirst = [{
    'name': 'A',
    'date': "May-31-2012",
    'value1': 56
  }, {
    'name': 'A',
    'date': "Jun-05-2014",
    'value1': 36
  }, {
    'name': 'A',
    'date': "Nov-28-2015",
    'value1': 29
  }, {
    'name': 'A',
    'date': "Dec-01-2017",
    'value1': 58
  }];
    var arrSecond = [{
    'date': "May-31-2012",
    'value2': 26
  }, {
    'date': "Jun-05-2015",
    'value2': 78
  }, {
    'date': "Nov-28-2015",
    'value2': 560
  }, {
    'date': "Dec-01-2016",
    'value2': 56
  }, {
    'date': "Dec-04-2016",
    'value2': 36
  }];

function mergeArrays(arr1, arr2) {
            var a1 = [];
            if(arr1 && arr2) {
                if(arr1.length >= arr2.length) {
                  arr1.forEach(function(e, k, i) {
                    a1.push(k);
                    a1[k] = [];
                    a1[k] = merge(e, arrSecond[k]);
                  });
                } else {
                  arr2.forEach(function(e, k, i) {
                    a1.push(k);
                    a1[k] = [];
                    a1[k] = merge(e, arrFirst[k]);
                  });
                }
            } else {
                if(arr1) {
                a1 = arr1;
              }
              if(arr2) {
                a1 = arr2;
              }
            }
            return a1;
        }

function merge(arr1, arr2) {
    if(arr1 && arr2) {
    return Object.assign(arr1, arr2);
  } else {
    if(arr1) {
        return arr1;
    } 
    if(arr2) {
    return arr2;
    }
  }
}

console.log(mergeArrays(arrFirst, arrSecond));