当前位置:首页 > JavaScript

js实现分组

2026-01-31 20:01:15JavaScript

实现数组分组的方法

在JavaScript中,可以通过多种方式实现数组分组操作。以下是几种常见的实现方法:

使用reduce方法分组

const groupBy = (array, key) => {
  return array.reduce((result, currentItem) => {
    const groupKey = currentItem[key];
    if (!result[groupKey]) {
      result[groupKey] = [];
    }
    result[groupKey].push(currentItem);
    return result;
  }, {});
};

使用Object.groupBy方法(ES2023新增)

js实现分组

const grouped = Object.groupBy(items, ({ age }) => {
  return age > 18 ? 'adult' : 'minor';
});

按条件分组

const groupByCondition = (array, callback) => {
  return array.reduce((acc, item) => {
    const key = callback(item);
    acc[key] = acc[key] || [];
    acc[key].push(item);
    return acc;
  }, {});
};

分组后转换为数组

如果需要将分组结果转换为数组形式:

js实现分组

const groupToArray = (array, key) => {
  const groups = {};
  array.forEach(item => {
    const groupKey = item[key];
    if (!groups[groupKey]) {
      groups[groupKey] = [];
    }
    groups[groupKey].push(item);
  });
  return Object.keys(groups).map(key => ({
    key,
    items: groups[key]
  }));
};

多条件分组

实现基于多个属性的分组:

const multiGroupBy = (array, keys) => {
  return array.reduce((result, item) => {
    const groupKey = keys.map(k => item[k]).join('|');
    if (!result[groupKey]) {
      result[groupKey] = [];
    }
    result[groupKey].push(item);
    return result;
  }, {});
};

分组性能优化

对于大型数据集,可以考虑使用Map代替普通对象:

const groupByWithMap = (array, key) => {
  const map = new Map();
  array.forEach(item => {
    const groupKey = item[key];
    if (!map.has(groupKey)) {
      map.set(groupKey, []);
    }
    map.get(groupKey).push(item);
  });
  return Object.fromEntries(map);
};

这些方法可以根据实际需求选择使用,reduce方法兼容性最好,而Object.groupBy是最新的标准方法但需要较新的JavaScript环境支持。

标签: js
分享给朋友:

相关文章

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…