javascript - JS 使用 Array.map() 和 Array.reduce() 简化数组到对象转换的重构
问题描述
我有一个 API 调用,它以这种格式返回数据:
const testScheduleData = [
{
DATE: "2021-06-20",
SELECTED: false,
STARTINGDAY: true,
ENDINGDAY: true,
STATUS: "WORK",
COLOR: "green",
},
{
DATE: "2021-06-21",
SELECTED: false,
STARTINGDAY: true,
ENDINGDAY: true,
STATUS: "HALFDAY",
COLOR: "green",
},
];
我需要将其重组为object of objects
这样的格式:
Object {
"2021-06-20": Object {
"color": "green",
"endingDay": true,
"selected": false,
"startingDay": true,
},
"2021-06-21": Object {
"color": "green",
"endingDay": true,
"selected": false,
"startingDay": true,
},
我这样做的方式是首先映射testScheduleData
到数组(暂时忽略 item.STATUS):
const datesArr = testScheduleData.map((item, index) => ({
[item.DATE]: {
startingDay: item.STARTINGDAY,
endingDay: item.ENDINGDAY,
color: item.COLOR,
selected: item.SELECTED,
},
}));
然后用于reduce
从中创建一个对象:
var datesObj = datesArr(function (result, item) {
var key = Object.keys(item)[0];
result[key] = item[key];
return result;
}, {});
它返回正确的结果,但似乎有点过头了。有没有办法简化这两个步骤?
解决方案
试试下面的代码,你只需要映射并推入一个对象
let obj = {}
const testScheduleData = [
{
DATE: "2021-06-20",
SELECTED: false,
STARTINGDAY: true,
ENDINGDAY: true,
STATUS: "WORK",
COLOR: "green",
},
{
DATE: "2021-06-21",
SELECTED: false,
STARTINGDAY: true,
ENDINGDAY: true,
STATUS: "HALFDAY",
COLOR: "green",
},
];
testScheduleData.map(row => {
obj[row.DATE] = row
})
console.log(obj)
推荐阅读
- r - 使用 R 和 ggplot 创建两行差异的 geom_bar
- ssl - 在 WinHttpReceiveResponse 接收 12030
- java - 为什么@Formula 返回空值
- docker - 如何使用 docker 配置 iptables 策略以阻止外部 ip
- c# - 如何使用 OpenXML SDK 在 Powerpoint 幻灯片中隐藏文本?
- jquery - 使用 .getAttribute 获取(仅)输入字段的 ID
- elasticsearch - Vega-lite 热图检测颜色
- ibm-watson - 如何让 IBM Watson Assistant 知道自己该往哪个方向走?
- java - LocalDate 用 jackson-dataformat-csv 错误序列化 csv
- python - 在 2 个(或更多)值之间找到 DF 的第一个索引