likes
comments
collection
share

让数组元素自动分类?分享 1 段优质 JS 代码片段!

作者站长头像
站长
· 阅读数 24

本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!

大家好,我是大澈!

本文约 900+  字,整篇阅读约需 1 分钟。

今天分享一段优质 JS 代码片段,可以轻松地按指定属性对数组对象进行分组。

老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!

const inventory = [
 { name"asparagus"type"vegetables"quantity5 },
 { name"bananas"type"fruit"quantity0 },
 { name"goat"type"meat"quantity23 },
 { name"cherries"type"fruit"quantity5 },
 { name"fish"type"meat"quantity22 },
];

const result = Object.groupBy(inventory, ({ type }) => type);

/* 结果如下:
{
 vegetables: [
 { name: "asparagus", type: "vegetables", quantity: 5 },
 ],
 fruit: [
 { name: "bananas", type: "fruit", quantity: 0 },
 { name: "cherries", type: "fruit", quantity: 5 }
 ],
 meat: [
 { name: "goat", type: "meat", quantity: 23 },
 { name: "fish", type: "meat", quantity: 22 }
 ]
}
*/

分享原因

这段代码展示了如何使用 Object.groupBy 方法对数组中的对象按特定属性进行分组。

它是一种简洁、高效的分组方式,特别适用于需要根据对象的某个属性来对数据进行分类的场景。

此方法增强了代码的可读性和可维护性,简化了数据处理过程,这在项目中是很有必要的。

代码解析

1. 定义 inventory 数组

inventory 是一个包含多个对象的数组。

每个对象表示一种商品,包括商品的名称 (name)、类型 (type) 和数量 (quantity)。

现在这个数组的数据很乱,我们要根据商品类型对数据进行有序处理一下。

2. Object.groupBy(inventory, ({ type }) => type);

Object.groupBy 方法对 inventory 数组进行分组。

分组的依据是对象的 type 属性,通过回调函数 ({ type }) => type 提取每个对象的 type 属性作为分组键。

结果将是一个对象,其中键是各个 type 值,值是相应类型的对象数组。

3. Object.groupBy 详解

设置object.groupBy()是一个静态方法,可以轻松地按指定属性对可迭代对象(如数组)中的元素进行分组,最终返回一个新的对象。

groupBy(items, callbackFn) 有两个参数:

items:一个可迭代对象(如数组),包含你想要分组的元素。

callbackFn:一个回调函数,对每个元素执行。这个函数应该返回一个可以转换为属性键(字符串或符号)的值,指示当前元素所属的组。

回调函数callbackFn的参数又包括:

element:当前正在处理的元素。

index:当前正在处理的元素的索引。

转载自:https://juejin.cn/post/7394073179483422720
评论
请登录