当前位置:首页 > JavaScript

js实现分组

2026-03-13 17:58:46JavaScript

实现数组分组的方法

在JavaScript中,可以通过多种方式实现数组分组操作。以下是几种常见的方法:

使用reduce方法

通过Array.prototype.reduce()方法可以高效地对数组进行分组:

const groupBy = (array, key) => {
  return array.reduce((result, currentItem) => {
    const groupKey = currentItem[key];
    (result[groupKey] = result[groupKey] || []).push(currentItem);
    return result;
  }, {});
};

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

使用forEach循环

通过简单的forEach循环也能实现分组:

js实现分组

function groupBy(array, property) {
  const grouped = {};
  array.forEach(item => {
    const key = item[property];
    if (!grouped[key]) {
      grouped[key] = [];
    }
    grouped[key].push(item);
  });
  return grouped;
}

使用Map对象

利用Map对象可以创建更灵活的分组结构:

function groupByMap(array, keyFn) {
  const map = new Map();
  array.forEach(item => {
    const key = keyFn(item);
    const collection = map.get(key);
    if (!collection) {
      map.set(key, [item]);
    } else {
      collection.push(item);
    }
  });
  return map;
}

// 示例用法
const result = groupByMap(data, item => item.category);

使用lodash库

如果项目中已经使用了lodash,可以直接使用其groupBy方法:

js实现分组

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

按条件分组

当需要根据更复杂的条件而非简单属性值进行分组时:

function groupByCondition(array, conditionFn) {
  return array.reduce((acc, item) => {
    const key = conditionFn(item);
    acc[key] = acc[key] || [];
    acc[key].push(item);
    return acc;
  }, {});
}

// 示例:按字符串长度分组
const strings = ['a', 'bb', 'ccc', 'dd'];
const groupedByLength = groupByCondition(strings, str => str.length);

多级分组

对于需要多层嵌套的分组情况:

function multiLevelGroup(array, ...keys) {
  return array.reduce((result, item) => {
    keys.reduce((acc, key, i) => {
      const groupKey = item[key];
      if (i === keys.length - 1) {
        (acc[groupKey] = acc[groupKey] || []).push(item);
      } else {
        acc[groupKey] = acc[groupKey] || {};
      }
      return acc[groupKey];
    }, result);
    return result;
  }, {});
}

这些方法覆盖了从简单到复杂的分组需求,可以根据具体场景选择最适合的实现方式。

标签: js
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现pdf在线预览

js实现pdf在线预览

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

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…