如何将现有对象修改为新对象javascript

时间:2020-02-04 09:00:39

标签: javascript arrays object

我希望实现现有对象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"},
  ]
 }

1 个答案:

答案 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; }

相关问题