我从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}
对象可以进行硬编码,并且日期格式必须如图所示。
谢谢!
答案 0 :(得分:1)
普通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>
答案 1 :(得分:0)
在这种情况下,如果您可以利用ES5并只使用reduce来减少一根衬板,则真的不需要耗费时间:
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 }, {})