当前位置:首页 > JavaScript

js实现groupby

2026-03-15 09:37:52JavaScript

实现 JavaScript 的 groupBy 功能

在 JavaScript 中,groupBy 是一种常见的数据操作,用于根据指定的键将数组元素分组。可以通过多种方式实现这一功能,以下是几种常见的方法:

使用 reduce 方法

reduce 是 JavaScript 数组的一个强大方法,非常适合用于分组操作。以下是一个示例:

function groupBy(arr, key) {
  return arr.reduce((acc, obj) => {
    const groupKey = obj[key];
    if (!acc[groupKey]) {
      acc[groupKey] = [];
    }
    acc[groupKey].push(obj);
    return acc;
  }, {});
}

// 示例用法
const data = [
  { id: 1, category: 'A' },
  { id: 2, category: 'B' },
  { id: 3, category: 'A' },
  { id: 4, category: 'B' }
];

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

输出结果:

js实现groupby

{
  A: [{ id: 1, category: 'A' }, { id: 3, category: 'A' }],
  B: [{ id: 2, category: 'B' }, { id: 4, category: 'B' }]
}

使用 MapObject.fromEntries

如果需要更现代的实现方式,可以结合 MapObject.fromEntries

function groupBy(arr, key) {
  const map = new Map();
  arr.forEach(obj => {
    const groupKey = obj[key];
    if (!map.has(groupKey)) {
      map.set(groupKey, []);
    }
    map.get(groupKey).push(obj);
  });
  return Object.fromEntries(map);
}

使用 Lodash 库

如果项目中已经使用了 Lodash,可以直接使用其提供的 _.groupBy 方法:

js实现groupby

const _ = require('lodash');

const data = [
  { id: 1, category: 'A' },
  { id: 2, category: 'B' },
  { id: 3, category: 'A' },
  { id: 4, category: 'B' }
];

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

按函数分组

如果需要更复杂的分组逻辑,可以传递一个函数作为键:

function groupBy(arr, keyFunc) {
  return arr.reduce((acc, obj) => {
    const groupKey = keyFunc(obj);
    if (!acc[groupKey]) {
      acc[groupKey] = [];
    }
    acc[groupKey].push(obj);
    return acc;
  }, {});
}

// 示例用法
const data = [
  { id: 1, value: 10 },
  { id: 2, value: 20 },
  { id: 3, value: 30 },
  { id: 4, value: 40 }
];

const groupedData = groupBy(data, item => item.value > 20 ? 'high' : 'low');
console.log(groupedData);

输出结果:

{
  low: [{ id: 1, value: 10 }, { id: 2, value: 20 }],
  high: [{ id: 3, value: 30 }, { id: 4, value: 40 }]
}

注意事项

  • 如果分组的键值为 undefinednull,需要特别处理,避免分组失败。
  • 对于大型数组,reduce 方法的性能通常优于循环遍历。

以上方法可以根据具体需求选择使用,纯 JavaScript 的实现适用于大多数场景,而 Lodash 提供了更简洁的 API。

标签: jsgroupby
分享给朋友:

相关文章

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现打印

js实现打印

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

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…