【问题标题】:how to group the data by a field into subarray in JavaScript如何在 JavaScript 中按字段将数据分组到子数组中
【发布时间】:2023-02-07 21:15:26
【问题描述】:

我有一个如下所示的数组。我想按天字段对这个数组进行分组。

input_array = [{
  "name": "alagu",
  "day": "monday",
  "time": "morning",
  "task": "studying"
}, {
  "name": "alagu",
  "day": "monday",
  "time": "evening",
  "task": "playing"
}, {
  "name": "alagu",
  "day": "monday",
  "time": "night",
  "task": "sleeping"
}, {
  "name": "alagu",
  "day": "sunday",
  "time": "morning",
  "task": "playing"
}, {
  "name": "alagu",
  "day": "sunday",
  "time": "evening",
  "task": "playing"
}, {
  "name": "alagu",
  "day": "sunday",
  "time": "night",
  "task": "sleeping"
}]

我希望结果类似于下面的数组。

result_array = [{
  "name": "alagu",
  "day": "monday",
  "schedule": [
    { "time": "morning", "task": "studying" },
    { "time": "evening", "task": "playing"  },
    { "time": "evening", "task": "sleeping" }
  ]
}, {
  "name": "alagu",
  "day": "sunday",
  "schedule": [
    { "time": "morning", "task": "playing"  },
    { "time": "evening", "task": "playing"  },
    { "time": "night",   "task": "sleeping" }
  ]
}]

我的意思是我想按天分组,然后我必须制作包含时间和任务元素的子数组时间表。请帮忙。

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    您可以像这样使用 reduce 函数:

    const input_array = [{
      "name": "alagu",
      "day": "monday",
      "time": "morning",
      "task": "studying"
    }, {
      "name": "alagu",
      "day": "monday",
      "time": "evening",
      "task": "playing"
    }, {
      "name": "alagu",
      "day": "monday",
      "time": "night",
      "task": "sleeping"
    }, {
      "name": "alagu",
      "day": "sunday",
      "time": "morning",
      "task": "playing"
    }, {
      "name": "alagu",
      "day": "sunday",
      "time": "evening",
      "task": "playing"
    }, {
      "name": "alagu",
      "day": "sunday",
      "time": "night",
      "task": "sleeping"
    }]
    
    const result_array = Object.entries(input_array.reduce((acc, curr) => {
      return {
        ...acc,
        [curr.day]: curr.day in acc ? [...acc[curr.day], curr] : [curr]
      }
    }, {})).map(([key, value]) => ({
      name: value[0].name,
      day: key,
      schedule: value.map(val => ({
        time: val.time,
        task: val.task
      }))
    }))
    
    console.log(result_array)

    【讨论】:

      【解决方案2】:

      要通过 foreachmap 函数从示例数据中获取所需的结果:

      const input_array = [{ "name":"alagu", "day":"monday", "time":"morning", "task":"studying" }, 
                     { "name":"alagu", "day":"monday", "time":"evening", "task":"playing" },
                     { "name":"alagu", "day":"monday", "time":"night", "task":"sleeping" },
                     { "name":"alagu", "day":"sunday", "time":"morning", "task":"playing" },
                     { "name":"alagu", "day":"sunday", "time":"evening", "task":"playing" }, 
                     { "name":"alagu", "day":"sunday", "time":"night", "task":"sleeping" }]
      
      const result = {};
      
      inputArray.forEach(item => {
          const { name, day, time, task } = item;
          if (!result[day]) {
              result[day] = { name, day, schedule: [] };
          }
          result[day].schedule.push({ time, task });
      });
      
      const resultArray = Object.keys(result).map(key => result[key]);
      
      console.log(resultArray);
      

      结果 :

      [
         {
            "name":"alagu",
            "day":"monday",
            "schedule":[
               {
                  "time":"morning",
                  "task":"studying"
               },
               {
                  "time":"evening",
                  "task":"playing"
               },
               {
                  "time":"night",
                  "task":"sleeping"
               }
            ]
         },
         {
            "name":"alagu",
            "day":"sunday",
            "schedule":[
               {
                  "time":"morning",
                  "task":"playing"
               },
               {
                  "time":"evening",
                  "task":"playing"
               },
               {
                  "time":"night",
                  "task":"sleeping"
               }
            ]
         }
      ]
      

      【讨论】:

      • 如何按字段将数据分组到子数组中JavaScript
      • 在javascript中编辑的代码
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      相关资源
      最近更新 更多