我试图实现类似于SQL表连接的东西, 以最优雅(功能)的方式,最好使用underscore.js, 所以没有for循环请。
我需要合并来自两个不同数组的对象,并在公共标识符上进行匹配。
例如,给定:
var basic = [{
id: '1',
name: 'someName',
},
{...} ]
var ext= [{
id: '1',
job: 'someJob',
},
{...} ]
结果应为:
var combined = [{
id: '1',
name: 'someName',
job: 'someJob',
},
{...} ]
谢谢!
答案 0 :(得分:3)
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]);
});
答案 1 :(得分:0)
NO LOOP: 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 ;
}