使用loadash进行数据操作(左键连接)

时间:2016-11-27 10:14:16

标签: javascript underscore.js lodash

this post on SO之后,我想使用lodash实现最简单的数据操作。

但我真的不知道该怎么做。

I've set a Jsfiddle here.

问题:

var months = ["jan", "feb", "mar", "apr"];
var cashflows = [
    {'month':'jan', 'value':10}, 
  {'month':'mar', 'value':20}
  ];

我想:

[
  {'month':'jan', 'value':10},
  {'month':'feb', 'value':''},
  {'month':'mar', 'value':20},
  {'month':'apr', 'value':''}
];

注意:我希望解决方案对losash函数的调用较少,以提高可读性。

2 个答案:

答案 0 :(得分:2)

这是一个lodash解决方案maps在几个月的数组中创建你想要的结构:

var result = _.map(months, function(month){
    return {
        month: month,
        value: _.chain(cashflows)
            .find({month: month})
            .get('value', '')
            .value();
    }
});

使用find从现金流中返回每月的价值。如果没有找到现金流,那么get将使用默认值,这里是空字符串。

答案 1 :(得分:0)

在普通的Javascript中,您可以对给定数据使用哈希表,并根据months顺序重建结果。



var months = ['jan', 'feb', 'mar', 'apr'],
    cashflows = [{ month: 'jan', value: 10 }, { month: 'mar', value: 20 }],
    result = months.map(function (m) {
        return this[m] || { month: m, value: '' };
    }, cashflows.reduce(function (r, a) {
        r[a.month] = a;
        return r;
    }, Object.create(null)));

console.log(result);

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