[英]Map array of objects to collection using Lodash
我有一個來自 API 調用的 JS 對象數組:
[
{
"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}
對象可以硬編碼,日期需要按所示格式設置。
謝謝!
純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>
如果您可以使用 ES5 並且只對一個 liner 使用 reduce ,那么在這種情況下真的不需要 lodash ,如下所示:
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 }, {})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.