JavaScript 如何根据类型分组处理数据

得到一组数据,想要根据商店id(storeId)来分组处理改数据,请教一下有没有更好的方法???图片描述

阅读 1.9k
2 个回答
function transformData(arr, key) {
  const result = {}
  arr.forEach(item => {
    if (!result[item[key]]) {
      result[item[key]] = {
        [key]: item[key],
        goodList: [item],
      }
    } else {
      result[item[key]].goodList.push(item)
    }
  })
  return Object.values(result)
}
transformData(arr, 'storeId')

可以考虑一下lodash的groupBy

写了一个reduce版本的,供参考

const groupGoodListByStoreId = (arr) => arr.reduce((info, item) => {
  const { keyPosition, result } = info;
  const { storeId } = item;
  if (!(item.storeId in keyPosition)) {
    result.push({ storeId, goodsList: [] });
    keyPosition[storeId] = result.length - 1;
  }
  result[keyPosition[storeId]].goodsList.push(item);
  return { keyPosition, result };
}, { keyPosition: {}, result: [] });
待转换的数据
const goodList = [
  { id: 1, storeId: 1 },
  { id: 2, storeId: 2 },
  { id: 3, storeId: 1 }
];
执行转换函数
const { result } = groupGoodListByStoreId(goodList);
console.log(result);
转换后的结果
[
  {
    "storeId": 1,
    "goodsList": [
      {
        "id": 1,
        "storeId": 1
      },
      {
        "id": 3,
        "storeId": 1
      }
    ]
  },
  {
    "storeId": 2,
    "goodsList": [
      {
        "id": 2,
        "storeId": 2
      }
    ]
  }
]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题