我有一个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)
您可以使用映射回调返回对[key,value],然后将Object.fromEntries
或new Map
应用于结果:
datesObj = Object.fromEntries(
testScheduleData.map(it => [
it.DATE, {
startingDay: it.STARTINGDAY,
endingDay: it.ENDINGDAY,
color: it.COLOR,
selected: it.SELECTED,
}
]))