Javascript通过日期时间将多个对象数组合成一个数组

问题描述:

我有多个对象数组,例如;Javascript通过日期时间将多个对象数组合成一个数组

var arr1 = [{date:'2017-02-17',value1:5}{date:'2017-02-18',value1:4}] 
var arr2 = [{date:'2017-02-17',value2:3}] 
var arr3 = [{date:'2017-02-18',value3:2},{date:'2017-02-19',value3:7}] 

而我需要得到一个结果数组,如:

[{date:'2017-02-17',value1:5,value2:3},{date:'2017-02-18',value1:4,value3:2},{date:'2017-02-19',value3:7}] 

谢谢。

+1

欢迎来到Stack Overflow!请[参观],环顾四周,阅读[帮助],尤其是[*我如何提出一个好问题?](/帮助/如何问)努力工作,* *如果您遇到问题,请发布您的代码并请求帮助*。只是要求人们为你做这件事并不是如何运作。 (另外:如果你[搜索](/帮助/搜索),那么这里有些东西可以帮助你完成这项工作。) –

您可以将所有阵列首先concat添加到一个阵列,并在该阵列上使用reduce

var arr1 = [{date:'2017-02-17',value1:5}, {date:'2017-02-18',value1:4}] 
 
var arr2 = [{date:'2017-02-17',value2:3}] 
 
var arr3 = [{date:'2017-02-18',value3:2}] 
 
    
 
var hash = {} 
 
var result = [].concat(arr1, arr2, arr3).reduce(function(r, e) { 
 
    if(!hash[e.date]) (hash[e.date] = e, r.push(hash[e.date])) 
 
    else Object.assign(hash[e.date], e) 
 
    return r 
 
}, []) 
 
    
 
console.log(result)

+0

谢谢!那有效。 –

function group() {        // no explicit arguments, we will use the arguments object 
 
    var hash = {};        // the hash object to facilitate the grouping 
 
    for(var i = 0; i < arguments.length; i++) { // for each array in arguments 
 
    arguments[i].forEach(function(o) {   // for each object o in that array 
 
     hash[o.date] = hash[o.date] || {};  // check if we already cached that date, if not create an empty object 
 
     for(var key in o) {      // for each key in the object o 
 
     hash[o.date][key] = o[key];   // add the key-value pairs to the equivalent object in the hash object 
 
     } 
 
    }); 
 
    } 
 
    return Object.keys(hash).map(function(key) { // map all the sub-object of the hash object into an array and return it as the result 
 
    return hash[key]; 
 
    }); 
 
} 
 

 

 
var arr1 = [{date:'2017-02-17',value1:5}, {date:'2017-02-18',value1:4}]; 
 
var arr2 = [{date:'2017-02-17',value2:3}]; 
 
var arr3 = [{date:'2017-02-18',value3:2}]; 
 

 
console.log(group(arr1, arr2, arr3));   // you can pass as many arrays as you want!

的我使用过的东西文档:argumentsArray.prototype.map

+0

这也有效。谢谢! –