代码之家  ›  专栏  ›  技术社区  ›  goatstash

将数组转换为键值对对象

  •  -1
  • goatstash  · 技术社区  · 4 年前

    如果我有一个字符串数组,比如:

    ['person,item,cost,amount',
      'John,shoes,200,2']
    

    我如何将其转换为类似于:

    {  
       'John':[  
          {  
             item:'shoes',
             cost:'200',
             amount:'2',
             totalPriceForItems:'400'
          }
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   Hao Wu    4 年前

    如果我理解正确的话,你可以尝试以下方式:

    const convert = data => {
      const [columnsText, ...items] = data;
      const columns = columnsText.split(',');
      
      return items.reduce((acc, text) => {
        const { person, ...entries } = Object.fromEntries(text.split(',').map((value, i) => [columns[i], value]));
        entries.totalPriceForItems = String(entries.cost * entries.amount);
        
        if(acc[person]) {
          acc[person].push(entries);
        } else {
          acc[person] = [entries];
        }
        
        return acc;
      }, {});
    };
    
    const result = convert([
      'person,item,cost,amount', 
      'John,shoes,200,2', 
      'Bob,glasses,50,3',
      'John,shirts,100,5',
    ]);
    
    console.log(result);