Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何合并两个对象数组并连接值?_Javascript_Arrays_Underscore.js_Lodash - Fatal编程技术网

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 ] } ]