【问题标题】:Use switch case for array of objects对对象数组使用 switch case
【发布时间】:2021-06-29 09:47:54
【问题描述】:

我有以下数组 (transposed):

[
  [ 'Holiday', 'Date', 'Typ' ],
  [ 'Neujahr', 44197, 'FIXED' ],
  [ 'Heilige Drei Könige', 44202, 'REOCCURING' ],
  [ '…', '…', '…' ]
]

我需要什么:

{
  "holidays": [
    {
      "name": "Neujahr",
      "date": "01.01.2021",
      "type": "RECURRING"
    },
    ...
  ]
}

我尝试使用的是这个开关盒:

const output: any = index.reduce((acc: any, curr: number, idx: number) => {
  switch (curr) {
    case 0:
      acc.name = transposed[1][0];
      break;
    case 1:
      acc.date = DateTimeUtil.xlDateConvert(transposed[idx][1]);
      break;
    case 2:
      acc.type = transposed[idx][2];
      break;
    default:
      break;
  }
  return acc;
}, {});

但这不起作用,因为我得到了这个结果:

{
  name: 'Neujahr',
  date: '2021-01-01T00:00:00.000Z',
  type: 'REOCCURING',
}

【问题讨论】:

    标签: javascript arrays typescript


    【解决方案1】:

    你确实使事情过于复杂了。你根本不需要reduce。您只想将数组映射到对象。

    const input = [
      [ 'Holiday', 'Date', 'Typ' ],
      [ 'Neujahr', 44197, 'FIXED' ],
      [ 'Heilige Drei Könige', 44202, 'REOCCURING' ],
    ];
    
    // input.slice(1) // get rid of first row
    const output = input.slice(1).map(([name, time, type]) => {
      return { 
        name,
        time: time, // DateTimeUtil.xlDateConvert(time)
        type,
      };
    });
    
    console.log({ holidays: output });

    【讨论】:

      【解决方案2】:

      也许你不需要switch

      const [holidays, name, date, type] = 'holidays,name,date,type'.split(',');
      const arr = [
          [ 'Neujahr', 44197, 'FIXED' ],
          [ 'Heilige Drei Könige', 44202, 'REOCCURING' ], 
        ].reduce( (acc, val) =>
           ( { ...acc, 
               [holidays]: [...acc[holidays], { 
                 [name]: val[0], 
                 [date]: val[1] /* raw */, 
                 [type]: val[2]} ] } 
           ), { [holidays]: [] } );
           
      console.log(arr);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-02
        • 2010-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-09
        • 2011-08-15
        相关资源
        最近更新 更多