Newer
Older
xc-business-system / src / commonMethods / useGroup.ts
dutingting on 21 May 2024 898 bytes 1. 工作提醒完成
/**
 * 将数组中具有相同属性值的元素分组
 * @param arr 数组
 * @param prop 属性
 * @param isMerge 结果数组是否合并
 * @returns
 */
export function useGroup(arr: any, prop: string, isMerge = true): any {
  const groups = {} as any // 创建空对象作为存储结果的容器
  let result = [] as any

  for (let i = 0; i < arr.length; i++) {
    const key = arr[i][prop] // 获取当前元素的指定属性值
    if (!groups[key]) {
      groups[key] = [] // 如果该属性值不存在于结果中,则新建一个空数组
    }

    groups[key].push(arr[i]) // 将当前元素添加到对应属性值所对应的数组中
  }
  if (isMerge) {
    Object.values(groups).forEach((item: any) => {
      result = result.concat(item)
    })
    return result // 返回包含了按属性值分组后的数组的数组
  }
  else {
    return Object.values(groups)
  }
}