簡體   English   中英

使用 Lodash 將對象數組映射到集合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM