当前位置:首页 > 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);

输出结果:

{
  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 方法:

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);

输出结果:

js实现groupby

{
  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实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…