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}]
谢谢。
答
您可以将所有阵列首先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!
的我使用过的东西文档:arguments,Array.prototype.map。
+0
这也有效。谢谢! –
欢迎来到Stack Overflow!请[参观],环顾四周,阅读[帮助],尤其是[*我如何提出一个好问题?](/帮助/如何问)努力工作,* *如果您遇到问题,请发布您的代码并请求帮助*。只是要求人们为你做这件事并不是如何运作。 (另外:如果你[搜索](/帮助/搜索),那么这里有些东西可以帮助你完成这项工作。) –