javascript Array groupBy javascript中如何根据列表元素中的某个字段对列表进行分组操作?

2024-06-10 01:36

本文主要是介绍javascript Array groupBy javascript中如何根据列表元素中的某个字段对列表进行分组操作?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • Intro
    • demo
    • 参考

Intro

完整描述:SQL中有 group by xxx 的筛选方式。而在 javascript 中,如何实现以下需求?
根据某个列表元素中的某个条件(可能是多个字段),将列表中的元素分成几组。

目前(2024-06-09) javascript 的 Array 类型还没有对外提供类似于 groupby 的方法。
所以我们只能自己实现了。
你可以自己实现,多用几次for循环,达到分组效果。
也可以参考以下,借助于Array.prototype.reduct API遍历一次就得到分组后的数据。

demo

// 原数据格式 [obj...]
var productDataList = [{ category: "Fruits", price: "$1", stocked: true, name: "Apple" },{ category: "Fruits", price: "$1", stocked: true, name: "Dragonfruit" },{ category: "Fruits", price: "$2", stocked: false, name: "Passionfruit" },{ category: "Vegetables", price: "$2", stocked: true, name: "Spinach" },{ category: "Vegetables", price: "$4", stocked: false, name: "Pumpkin" },{ category: "Vegetables", price: "$1", stocked: true, name: "Peas" }
];// 用 Array.prototype.reduct 实现类似于 groupBy 的效果。
var categoryAndObjMapList = productDataList.reduce((result, currValue) => {let currCategory = currValue.category;// 当前分类已经有了,非空数组,则向对应分类下的列表中新增一个元素if (Object.keys(result).includes(currCategory)) {result[currCategory].push(currValue);} else {// 初始化新的分类,并同时设置第一个元素result[currCategory] = [currValue];}console.log({currCategory, result});return result;
}, {});// 转换后的数据格式:{ "分类1": [obj...], "分类2": [obj...] }
console.log(categoryAndObjMapList);
{"Fruits": [{ "category": "Fruits", "price": "$1", "stocked": true, "name": "Apple" },{ "category": "Fruits", "price": "$1", "stocked": true, "name": "Dragonfruit" },{ "category": "Fruits", "price": "$2", "stocked": false, "name": "Passionfruit" }],"Vegetables": [{ "category": "Vegetables", "price": "$2", "stocked": true, "name": "Spinach" },{ "category": "Vegetables", "price": "$4", "stocked": false, "name": "Pumpkin" },{ "category": "Vegetables", "price": "$1", "stocked": true, "name": "Peas" }]
}

其中起到 groupBy 作用的方法实现部分,可以简写为如下:

var categoryAndObjMapList = productDataList.reduce((result, currValue) => {let currCategory = currValue.category;result[currCategory] = (result[currCategory]) ?? [];	// 如果 result[currCategory] 已有值则不变,如为空则设置为空数组。result[currCategory].push(currValue);return result;
}, {});

参考

  • javascript Array.prototype.reduct
  • javascript ?? 空值合并运算符

这篇关于javascript Array groupBy javascript中如何根据列表元素中的某个字段对列表进行分组操作?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1046879

相关文章

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

Spring 缓存在项目中的使用详解

《Spring缓存在项目中的使用详解》Spring缓存机制,Cache接口为缓存的组件规范定义,包扩缓存的各种操作(添加缓存、删除缓存、修改缓存等),本文给大家介绍Spring缓存在项目中的使用... 目录1.Spring 缓存机制介绍2.Spring 缓存用到的概念Ⅰ.两个接口Ⅱ.三个注解(方法层次)Ⅲ.

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

Spring Cache注解@Cacheable的九个属性详解

《SpringCache注解@Cacheable的九个属性详解》在@Cacheable注解的使用中,共有9个属性供我们来使用,这9个属性分别是:value、cacheNames、key、key... 目录1.value/cacheNames 属性2.key属性3.keyGeneratjavascriptor

redis在spring boot中异常退出的问题解决方案

《redis在springboot中异常退出的问题解决方案》:本文主要介绍redis在springboot中异常退出的问题解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴... 目录问题:解决 问题根源️ 解决方案1. 异步处理 + 提前ACK(关键步骤)2. 调整Redis消费者组

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

java中XML的使用全过程

《java中XML的使用全过程》:本文主要介绍java中XML的使用全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录什么是XML特点XML作用XML的编写语法基本语法特殊字符编写约束XML的书写格式DTD文档schema文档解析XML的方法​​DOM解析XM