我希望实现现有对象sampleobj
,如预期输出所示。
我有密钥jan, feb, mar,apr
,其值用逗号分隔,
应该始终将第一个字符串作为begin
,并将第二个字符串作为end
“ jan”:“ 07:30,23:00” //开始,结束
到
“ jan_begin”:“ 07:30”, “ jan_end”:“ 23:00”,
let res ={};
Object.keys(sampleobj).forEach(key => {
Object.assign({},key_begin: sampleobj[key].split(",")[0], key_end: sampleobj[key].split(",")[1])
})
var sampleobj = {
"jan": "07:30,23:00"
"feb": "08:30,23:00"
"mar": "07:30,22:00"
"apr": ""
"30-12-2019": "10:00,24:00",
"31-12-2019": "11:00,24:00"
}
预期输出:
{
month:{
"jan_begin": "07:30",
"jan_end": "23:00",
"feb_begin": "08:30",
"feb_end": "23:00",
"mar_begin": "07:30",
"mar_end": "22:00",
"apr": "",
},
fields: [
{date: "30-12-2019", begin: "10:00", end: "24:00"},
{date: "31-12-2019", begin: "11:00", end: "24:00"},
]
}
答案 0 :(得分:2)
您可以先检查该值,然后确定一个空字符串或采用分割的开始/结束值。
var object = { jan: "07:30,23:00", feb: "08:30,23:00", mar: "07:30,22:00", apr: "", "30-12-2019": "10:00,24:00", "31-12-2019": "11:00,24:00" },
result = Object
.entries(object)
.reduce((r, [k, v]) => {
if (v === '') {
r.month[k] = '';
return r;
}
var [begin, end] = v.split(',');
if (k.length === 3) {
r.month[k + '_begin'] = begin;
r.month[k + '_end'] = end;
} else {
r.fields.push({ date: k, begin, end });
}
return r;
}, { month: {}, fields: [] });
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }