首页 > 解决方案 > lodash Left 连接两个对象

问题描述

var data = [{LearnerId:6362, ColName:AETY10, Value:9, Subject:E+, LookupId:37}]
var subs = [{LookupId:4, Name:Art},{LookupId:37, Name:Maths}]

var merged = _.merge(_.keyBy(data,'LookupId'), _.keyBy(subs, 'LookupId'));
var mapped = _.values(merged);

但这不会将数组作为左连接返回,所以我希望它显示为:

var mapped = [{LearnerId:6362, ColName:AETY10, Value:9, Subject:E+, LookupId:37,Name:Maths}]

这在 Lodash 中可能吗?

标签: javascriptgoogle-apps-scriptlodash

解决方案


代替lodash,您可以采用一个函数,该函数使用 for 所需键执行外连接,Map并返回一个带有新对象的数组,该对象具有附加属性。

var outerjoin = (data, outer, key) => {
        const lookup = new Map(subs.map(o => [o[key], o]));
        return data.map(o => ({ ...o, ...lookup.get(o[key]) }));
    },
    data = [{ LearnerId: 6362, ColName:'AETY10', Value: 9, Subject: 'E+', LookupId: 37 }],
    subs = [{ LookupId: 4, Name: 'Art' }, { LookupId: 37, Name: 'Maths' }],
    merged = outerjoin(data, subs, 'LookupId');

console.log(merged);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读