2016-11-27 8 views
2

После this post on SO, я хочу добиться простейшей обработки данных с помощью lodash.Обработка данных с помощью loadash (вроде объединения слева)

Но я действительно не знаю, как это сделать.

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 функций для того, чтобы улучшить читаемость.

+0

Вы можете использовать каждый и найти lodash, чтобы получить конкретный результат. https://jsfiddle.net/wj4jvfp8/3/ –

ответ

2

Вот lodash решение, которое maps по массиву месяцев, чтобы создать структуру, которую вы хотите:

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

значение для каждого месяца возвращается из денежных потоков с использованием find. Если денежный поток не найден, то get будет использовать значение по умолчанию, которое представляет собой пустую строку.

+0

Лучшее решение, так как оно использует lodash. Я узнал .chain, .get и .find, thks – bixente57

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; }