当前位置:首页 > JavaScript

js实现groupby

2026-04-07 03:07:22JavaScript

实现 JavaScript 的 groupBy 功能

在 JavaScript 中实现 groupBy 功能可以将数组中的元素按照指定的条件分组。以下是几种常见的实现方式:

js实现groupby

使用 Array.prototype.reduce

function groupBy(array, key) {
  return array.reduce((acc, obj) => {
    const groupKey = typeof key === 'function' ? key(obj) : obj[key];
    if (!acc[groupKey]) {
      acc[groupKey] = [];
    }
    acc[groupKey].push(obj);
    return acc;
  }, {});
}

// 示例用法
const data = [
  { id: 1, category: 'fruit', name: 'apple' },
  { id: 2, category: 'vegetable', name: 'carrot' },
  { id: 3, category: 'fruit', name: 'banana' }
];

const grouped = groupBy(data, 'category');
console.log(grouped);

使用 ES6 Map 对象

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

// 示例用法同上

支持函数作为分组条件

function groupBy(array, keyFunc) {
  return array.reduce((acc, item) => {
    const key = typeof keyFunc === 'function' ? keyFunc(item) : item[keyFunc];
    (acc[key] = acc[key] || []).push(item);
    return acc;
  }, {});
}

// 示例用法:按名称长度分组
const groupedByLength = groupBy(data, item => item.name.length);

Lodash 的实现方式

如果项目中使用 Lodash 库,可以直接使用其 _.groupBy 方法:

js实现groupby

const _ = require('lodash');
const grouped = _.groupBy(data, 'category');

TypeScript 版本

function groupBy<T>(array: T[], key: keyof T | ((item: T) => string)): Record<string, T[]> {
  return array.reduce((acc: Record<string, T[]>, item: T) => {
    const groupKey = typeof key === 'function' ? key(item) : item[key] as string;
    (acc[groupKey] = acc[groupKey] || []).push(item);
    return acc;
  }, {});
}

性能考虑

对于大型数据集,reduce 方法通常比 forEachfor 循环有更好的性能表现。如果需要处理非常大的数组,可以考虑使用 Web Workers 或分批处理技术。

浏览器兼容性

现代浏览器都支持上述实现方法。如果需要支持旧版浏览器,可能需要添加 polyfill 或使用 Babel 转译代码。

标签: jsgroupby
分享给朋友:

相关文章

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js 进度条的实现

js 进度条的实现

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

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…