基于id优雅地映射两个对象?

时间:2015-09-07 09:59:07

标签: underscore.js lodash

我有两个表/对象列表,它们通过ID(用SQL术语,外键)连接。是否有一些优雅的方式对它们进行转换,所以我最终在“父”的属性中引用了“子对象”?

示例:

Table1: Id, Name
Table2: Id, Name, ForeignId (referencing Table1.Id)

预期结果:

Table2Object.Table1Object containing the correct object form Table1

我知道我可以通过首先按照Id(纯粹是为了表演)对孩子进行分组,然后用foreach覆盖父母来做到这一点,但这似乎相当......对我来说不好看。

1 个答案:

答案 0 :(得分:1)

与下划线的关系?有趣=)
您可以使用_.map()& _.filter()为此:

var t = [
    {id: 1, Name: 't1'},
    {id: 2, Name: 't2'},
    {id: 3, Name: 't3'},
    {id: 4, Name: 't4'}
];
var f = [
    {id: 1, Name: 'f1', ForeignId:1},
    {id: 2, Name: 'f2', ForeignId:1},
    {id: 3, Name: 'f3', ForeignId:2},
    {id: 4, Name: 'f4', ForeignId:3}
];

var res = _.map(t, function(p){
    var j = _.filter(f, function(n){
        return p.id === n.ForeignId;
    });
    if(j && j.length) p.f = j;
    return p;
});

Res结构:
enter image description here