Javascript 如何合并两个对象数组并连接值?
我有两个对象数组Javascript 如何合并两个对象数组并连接值?,javascript,arrays,underscore.js,lodash,Javascript,Arrays,Underscore.js,Lodash,我有两个对象数组 var client = [{ "creazione": "1970-01-01", "value": 2 }, { "creazione": "2014-03-12", "value": 4 }, { "creazione": "2014-03-14", "value": 1 }], order = [{ "creazione": "
var client = [{
"creazione": "1970-01-01",
"value": 2
}, {
"creazione": "2014-03-12",
"value": 4
}, {
"creazione": "2014-03-14",
"value": 1
}],
order = [{
"creazione": "1970-01-01",
"value": 1
}, {
"creazione": "2014-03-13",
"value": 5
}, {
"creazione": "2014-03-14",
"value": 1
}];
我需要合并这两个数组以获得如下结果:
[{
x: '1970-01-01',
y: [2, 1]
}, {
x: '2014-03-12',
y: [4, 0]
}, {
x: '2014-03-14',
y: [1, 1]
}, {
x: '2014-03-13',
y: [0, 5]
}]
简单地说,我需要检查a.creazione==b.creazione
,然后将键和concat值合并到一个数组(结果的第一行),否则如果它不同,则将现有数组的值分配到y
数组(结果的第三行)的正确位置
PS:我需要得到这个结构,因为我在使用库,它以这种不舒服的方式要求数据
有没有关于如何实现这一点的想法?使用纯JavaScript:
var result = [];
client.forEach( function( entry ) {
for( var i = 0; i < order.length; ++i ) {
if( entry.creazione === order[i].creazione ) {
result.push( { x: entry.creazione, y: [ entry.value, order[i].value ] } );
order.splice( i, 1 );
return;
}
}
result.push( { x: entry.creazione, y: [ entry.value, 0 ] } );
} );
order.forEach( function( entry ) {
result.push( { x: entry.creazione, y: [ 0, entry.value ] } );
} );
var结果=[];
client.forEach(函数(条目){
对于(变量i=0;i
小提琴:
请注意,为了简单起见,对order数组进行了修改。如果这对您的用例来说是一个问题,只需使用slice制作一个副本。请允许我用函数式编程的强大功能来逗乐您:)
client = _.object(_.map(client, _.values));
order = _.object(_.map(order , _.values));
var result = _
.chain(_.keys(client))
.union(_.keys(order))
.map(function (key) {
return [key, [client[key] || 0, order[key] || 0]];
})
.map(_.partial(_.zipObject, ['x', 'y']))
.value();
console.log(result);
# [ { x: '1970-01-01', y: [ 2, 1 ] },
# { x: '2014-03-12', y: [ 4, 0 ] },
# { x: '2014-03-14', y: [ 1, 1 ] },
# { x: '2014-03-13', y: [ 0, 5 ] } ]