You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何将按方位分组的时间值数组转为按时间分组的结构

实现思路
  • 先初始化空对象作为时间戳映射表,key为时间字符串,value为预设了四个方位默认值为null的对象
  • 遍历原数组的每一个方位项,拿到方位标识(n/e/s/w)和对应的数值列表
  • 遍历该方位的所有数值项,对应更新映射表中对应时间的方位值
  • 最后把映射表的所有值提取为数组,按时间排序即可
完整代码实现
function transformData(rawData) {
  // 预设四个方位默认值
  const defaultFaces = { n: null, e: null, s: null, w: null };
  const timeMap = {};

  // 遍历原始数据填充映射表
  rawData.forEach(faceItem => {
    const face = faceItem.face;
    faceItem.values.forEach(valItem => {
      const time = valItem.time;
      // 首次遇到该时间则初始化默认结构
      if (!timeMap[time]) {
        timeMap[time] = { time, ...defaultFaces };
      }
      // 赋值对应方位的数值
      timeMap[time][face] = valItem.value;
    });
  });

  // 提取为数组并按时间升序排序
  return Object.values(timeMap).sort((a, b) => a.time.localeCompare(b.time));
}

// 测试调用
const raw = [
  {
    face:"n",
    values:[
      {time:"15:00",value:5},
      {time:"15:02",value:6}
    ]
  },{
    face:"e",
    values:[
      {time:"15:01",value:7},
      {time:"15:02",value:8}
    ]
  },{
    face:"s",
    values:[
      {time:"15:01",value:7},
      {time:"15:02",value:8}
    ]
  },{
    face:"w",
    values:[
      {time:"15:01",value:7},
      {time:"15:02",value:8}
    ]
  }
];

console.log(transformData(raw));
逻辑说明
  • 用映射表存储时间维度的数据,避免重复创建同时间的对象,自动处理缺省值
  • 最后加排序步骤保证输出数组是按时间正序排列,适配原始数据时间乱序的场景
  • 方位固定为四个,默认值统一设为null,完全符合转换要求

内容的提问来源于stack exchange,提问作者justadev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:24:04