Object.groupBy(items, callbackFn)items:一个可迭代对象(如数组),包含你想要分组的元素。
callbackFn:一个回调函数,对每个元素执行。这个函数应该返回一个可以转换为属性键(字符串或符号)的值,指示当前元素所属的组。
const inventory = [ { name: "asparagus", type: "vegetables", quantity: 5 }, { name: "bananas", type: "fruit", quantity: 0 }, { name: "goat", type: "meat", quantity: 23 }, { name: "cherries", type: "fruit", quantity: 5 }, { name: "fish", type: "meat", quantity: 22 }, ]; 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 } ] } */在这个示例中,我们定义了一个包含不同食物项目的数组inventory。通过调用Object.groupBy(inventory, ({ type }) => type),我们根据食物的type属性对元素进行分组,并得到一个按类别(蔬菜、水果、肉类)组织的对象,每个类别都包含一个对应项目的数组。
const students = [ { name: "Alice", grade: 9, subject: "Math" }, { name: "Bob", grade: 10, subject: "Science" }, { name: "Charlie", grade: 9, subject: "English" }, { name: "David", grade: 10, subject: "Math" }, { name: "Eve", grade: 9, subject: "Science" }, ]; const result = Object.groupBy(students, ({ grade, subject }) => `${grade}-${subject}`); /* 结果如下: { "9-Math": [ { name: "Alice", grade: 9, subject: "Math" } ], "10-Science": [ { name: "Bob", grade: 10, subject: "Science" } ], "9-English": [ { name: "Charlie", grade: 9, subject: "English" } ], "10-Math": [ { name: "David", grade: 10, subject: "Math" } ], "9-Science": [ { name: "Eve", grade: 9, subject: "Science" } ] } */在这个示例中,我们有一个学生对象数组,每个学生都有姓名、年级和科目。通过使用回调函数({ grade, subject }) => {subject}``,我们根据年级和科目的组合对学生进行分组,结果是一个表示每个唯一组合的对象,每个组合包含相应学生的数组。
const products = [ { name: "Product A", price: 10, inStock: true }, { name: "Product B", price: 20, inStock: false }, { name: "Product C", price: 15, inStock: true }, { name: "Product D", price: 25, inStock: false }, { name: "Product E", price: 18, inStock: true }, ]; function myCallback({ inStock }) { return inStock ? "available" : "outOfStock"; } const result = Object.groupBy(products, myCallback); /* 结果如下: { available: [ { name: "Product A", price: 10, inStock: true }, { name: "Product C", price: 15, inStock: true }, { name: "Product E", price: 18, inStock: true } ], outOfStock: [ { name: "Product B", price: 20, inStock: false }, { name: "Product D", price: 25, inStock: false } ] } */在这个示例中,我们定义了一个包含产品对象的数组,每个产品都有名称、价格和库存状态。然后,我们创建了一个自定义回调函数myCallback,根据inStock属性返回“available”或“outOfStock”。通过传递这个回调函数给Object.groupBy(products, myCallback),我们将产品分为两个类别:“available”和“outOfStock”,结果是一个包含两个属性的对象,每个属性包含相应产品的数组。