首页 > 其他分享 >#yyds干货盘点#array.groupBy()

#yyds干货盘点#array.groupBy()

时间:2022-10-21 22:01:18浏览次数:57  
标签:category yyds product name products array groupBy

array.groupBy()

假设我们有一个产品列表,其中每个产品都是一个具有2个属性的对象: ​​name​​ 和 ​​category​​。

const products = [
{ name: 'apples', category: 'fruits' },
{ name: 'oranges', category: 'fruits' },
{ name: 'potatoes', category: 'vegetables' }
];

在上面的示例中,​​products​​ 是一个产品对象数组。

​现在,对产品列表执行一个简单的操作,将产品按类别分组。

const groupByCategory = {
'fruits': [
{ name: 'apples', category: 'fruits' },
{ name: 'oranges', category: 'fruits' },
],
'vegetables': [
{ name: 'potatoes', category: 'vegetables' }
]
};

如何从 ​​products​​​ 数组中得到一个类似 ​​groupByCategory​​ 的数组?

通常的方法是使用​​array.reduce()​​来实现,如下所示:

const groupByCategory = products.reduce((group, product) => {
const { category } = product;
group[category] = group[category] ?? [];
group[category].push(product);
return group;
}, {});
console.log(groupByCategory);

​products.reduce((acc, product) => { ... })​​ 将产品数组还原为一个按类别分组的产品对象。

​array.reduce()​​方法有用且强大,但有时它的可读性并不是最好的。

因为分组数据是常见的事(从SQL中召回groupby ?),数组组提案引入了两个有用的方法:​​array. groupBy()​​和 ​​array.groupByToMap()​​。

下面介绍如何使用 ​​array.groupBy()​​ 创建相同的分类分组:

const groupByCategory = products.groupBy(product => {
return product.category;
});

console.log(groupByCategory);

​products.groupBy(product => {...})​​ 返回一个对象,其中每个属性的键是类别名称,值是对应类别的产品数组。

使用 ​​products.groupBy()​​ 分组比使用 ​​product.reduce()​​ 代码更少,更容易理解。

​array.groupBy(callback)​​ 接受一个回调函数,该函数被调用时有3个参数:当前数组项、索引和数组本身。回调函数应该返回一个字符串:你想添加项目的组名。

const groupedObject = array.groupBy((item, index, array) => {
// ...
return groupNameAsString;
});

标签:category,yyds,product,name,products,array,groupBy
From: https://blog.51cto.com/u_11365839/5784603

相关文章

  • CopyOnWriteArrayList集合
    CopyOnWriteArrayList是为了增加在写操作的时候的读操作的性能因为并发问题主要是写操作,当一个线程进行写操作时,会使用Reetranlock加锁,然后会复制一份原数组在新数组上进......
  • #yyds干货盘点# LeetCode 腾讯精选练习 50 题:最长回文子串
    题目:给你一个字符串s,找到s中最长的回文子串。 示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"代码实现:publicclassSo......
  • #yyds干货盘点# LeetCode 腾讯精选练习 50 题:寻找两个正序数组的中位数
    题目:给定两个大小分别为m和n的正序(从小到大)数组 nums1和 nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为O(log(m+n))。 示例1:输入:num......
  • #yyds干货盘点# 面试必刷TOP101:设计LFU缓存结构
    1.简述:描述一个缓存结构需要实现如下功能。set(key,value):将记录(key,value)插入该结构get(key):返回key对应的value值但是缓存结构中最多放K条记录,如果新的第K+1条记录要......
  • #yyds干货盘点#前端图片预加载
    上一篇文章讲了图片懒加载的两种方法,今天再来讲讲图片预加载。用css和JavaScript实现预加载实现预加载图片有很多方法,包括使用css、JavaScript及两者的各种组合。这些技术可......
  • #yyds干货盘点#前端图片预加载
    上一篇文章讲了图片懒加载的两种方法,今天再来讲讲图片预加载。用css和JavaScript实现预加载实现预加载图片有很多方法,包括使用css、JavaScript及两者的各种组合。这些技术可......
  • #yyds干货盘点#【愚公系列】2022年10月 微信小程序-sitemap站内搜索
    前言1.sitemap.json介绍开发者可以通过sitemap.json配置,或者管理后台页面收录开关来配置其小程序页面是否允许微信索引。2.小程序爬虫特征当开发者允许微信索引时,微信......
  • Java基础(九)| ArrayList详解与应用
    ⭐本专栏旨在对JAVA的基础语法及知识点进行全面且详细的讲解,完成从0到1的java学习,面向零基础及入门的学习者,通过专栏的学习可以熟练掌握JAVA编程,同时为后续的框架学习,进阶开......
  • #yyds干货盘点# LeetCode 热题 HOT 100:单词拆分
    题目:给你一个字符串s和一个字符串列表wordDict作为字典。请你判断是否可以利用字典中出现的单词拼接出s。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以......
  • #yyds干货盘点# LeetCode 热题 HOT 100:环形链表
    题目:给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用......