当前位置:首页 > JavaScript

js实现分组函数

2026-02-02 21:58:05JavaScript

分组函数实现方法

在JavaScript中,分组函数通常指将数组元素按照特定条件分组。以下是几种常见的实现方式:

js实现分组函数

使用reduce方法实现分组

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

// 示例用法
const data = [
  {id: 1, category: 'A'},
  {id: 2, category: 'B'},
  {id: 3, category: 'A'}
];
const grouped = groupBy(data, 'category');
// 结果: {A: [{...}, {...}], B: [{...}]}

使用Map实现高效分组

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

按多个条件分组

function groupByMultiple(arr, keys) {
  return arr.reduce((groups, item) => {
    const groupKey = keys.map(k => item[k]).join('|');
    (groups[groupKey] = groups[groupKey] || []).push(item);
    return groups;
  }, {});
}

使用Lodash库的groupBy

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

js实现分组函数

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

性能优化版本

对于大型数据集,可以考虑以下优化版本:

function optimizedGroupBy(array, key) {
  const result = Object.create(null);
  for (const item of array) {
    const groupKey = item[key];
    let group = result[groupKey];
    if (group) {
      group.push(item);
    } else {
      result[groupKey] = [item];
    }
  }
  return result;
}

选择哪种实现方式取决于具体需求、数据规模和性能要求。原生reduce方法在大多数情况下表现良好,而Map版本在处理复杂键时更高效。

标签: 函数js
分享给朋友:

相关文章

Vue函数实现

Vue函数实现

在Vue中实现函数可以通过多种方式,具体取决于使用场景(选项式API、组合式API或生命周期钩子)。以下是常见方法: 方法1:选项式API中的methods 在Vue 2或选项式API中,函数通常定…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js验证码的实现

js验证码的实现

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

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…