js 数据结构变化

不知道如何将下面的代码转为对象

items = [
        {
          dept_id: 10002,
          date: '2021-04-06',
          state: 1,
          fatigue: 30,
          focus: 15,
          cautel: 100,
          calm: 0
        },
        {
          dept_id: 10002,
          date: '2021-04-06',
          state: 1,
          fatigue: 30,
          focus: 15,
          cautel: 100,
          calm: 0
        },
        {
          dept_id: 10001,
          date: '2021-04-09',
          state: 1,
          fatigue: 36,
          focus: 30,
          cautel: 99,
          calm: 0
        }
      ]```

希望转换的格式为将不同dept_id取出来作为key,如果key相同就将key里面的值相加取个平均
大概这样

10002: {

      fatigue: 30,
      focus: 15,
      cautel: 100,
      calm: 0
    },
    10001:{
      date: '2021-04-09',
      state: 1,
      fatigue: 36,
      focus: 30,
      cautel: 99,
      calm: 0
    }
阅读 1.2k
1 个回答
const arrayToMap = (arr) => {
  const mergeObj = (s1, s2) => {
    const keys = Object.keys(s1);

    for (const key of keys) {
      if (typeof s1[key] !== "number" || key === "dept_id") continue;

      s1[key] += s2[key];
      s1[key] /= 2;
    }
  };
  const map = new Map();

  for (let i = 0; i < arr.length; ++i) {
    if (map.has(arr[i].dept_id)) {
      mergeObj(map.get(arr[i].dept_id), arr[i]);
    } else {
      map.set(arr[i].dept_id, arr[i]);
    }
  }

  console.log(map);

  return Array.from(map.entries()).reduce((acc, cur) => {
    acc[cur[0]] = cur[1];

    return acc;
  }, {});
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题