当前位置:首页 > 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 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-contain…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…