Сопоставить массив объектов с коллекцией, используя Lodash - PullRequest
0 голосов
/ 03 октября 2018

У меня есть массив JS-объектов, подобных этому из вызова API:

[
    {
        "date": "2018-09-21T07:00:00",
        "assignments": 1
    },
    {
        "date": "2018-09-17T07:00:00",
        "assignments": 3
    },
    {
        "date": "2018-09-12T07:00:00",
        "assignments": 0
    }
]

Как можно использовать Lodash для сопоставления этого массива со следующей коллекцией объектов?

{{
'2018-09-21': {selected: true},
'2018-09-17': {selected: true},
'2018-09-12': {selected: true}
}}

Объект {marked:true} может быть жестко запрограммирован, а дату необходимо отформатировать, как показано на рисунке.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

В этом сценарии действительно нет необходимости ломать голову, если вы можете использовать ES5 и просто использовать уменьшение для одного лайнера, например, так:

var data = [ { "date": "2018-09-21T07:00:00", "assignments": 1 }, { "date": "2018-09-17T07:00:00", "assignments": 3 }, { "date": "2018-09-12T07:00:00", "assignments": 0 } ]

const result = data.reduce((r, {date}) => 
   (r[date.substr(0, 10)] = { selected: true }) && r, {})

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

Теперь, если вы не можете использовать функции ES6 и стрелки из-за ограничений браузера и т. Д. С lodash, вы можете сделать то же самое с помощью:

_.reduce(data, function (r, c) { r[c.date.substr(0, 10)] = { selected: true }; return r }, {})
0 голосов
/ 03 октября 2018

Простая реализация JS

const myArr = [
    {
        "date": "2018-09-21T07:00:00",
        "assignments": 1
    },
    {
        "date": "2018-09-17T07:00:00",
        "assignments": 3
    },
    {
        "date": "2018-09-12T07:00:00",
        "assignments": 0
    }
];
 
const result = myArr.reduce((acc, currentValue) => {
  const formattedDate = currentValue.date.substr(0, 10);
  acc[formattedDate] = { selected: true };

  return acc;
}, {});

console.log(result);

Реализация Lodash

const myArr = [
    {
        "date": "2018-09-21T07:00:00",
        "assignments": 1
    },
    {
        "date": "2018-09-17T07:00:00",
        "assignments": 3
    },
    {
        "date": "2018-09-12T07:00:00",
        "assignments": 0
    }
];
 
const result = _.reduce(myArr, (acc, currentValue) => {
  const formattedDate = currentValue.date.substr(0, 10);
  acc[formattedDate] = { selected: true };

  return acc;
}, {});

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
...