基于公共id连接两个js对象数组的功能方式

Functional way of joining two js object arrays based on common id

本文关键字:对象 js 数组 方式 功能 两个 id 于公共 连接      更新时间:2023-09-26

我试图实现类似于SQL表连接,以最优雅(功能)的方式,最好带有下划线。js,所以不要for循环。

我需要合并来自两个不同数组的对象,它们在一个共同的标识符上匹配。

例如:

var basic = [{
              id: '1',
              name: 'someName',
             }, 
             {...} ]
var ext= [{
              id: '1',
              job: 'someJob',
             }, 
             {...} ]

结果应该是:

var combined = [{
                 id: '1',
                 name: 'someName',
                 job: 'someJob',
                }, 
                {...} ]

谢谢!

Map, findWhere和extend应该可以做到:

var combined = _.map(basic, function(base){
    return _.extend(base, _.findWhere(ext, { id: base.id} ));
});

编辑:

如果性能有问题,创建扩展值的散列:

var extHash = _.reduce(ext, function(memo, extended, key){
    memo[extended.id] = extended;
    return memo;
}, {});

并像这样使用:

var combined = _.map(basic, function(base){
    return _.extend(base, extHash[base.id]);
});

小提琴

没有循环: http://jsfiddle.net/abdennour/h3hQt/2/

   basic=basic.sort(function(a,b){return a.id-b.id});
    ext=ext.sort(function(a,b){return a.id-b.id});
    var combined=basic.map(function(e,i){return inherits(e,ext[i]) });

已知,inherits如下:

function inherits(base, extension)
{
   for ( var property in base )
   { 
         extension[property] = base[property];
   }
    return extension ;
}