方法一:使用 reduce 方法
javascript
const originalArray = [
{ id: 1, category: 'A', name: 'Item 1' },
{ id: 2, category: 'B', name: 'Item 2' },
{ id: 3, category: 'A', name: 'Item 3' },
{ id: 4, category: 'C', name: 'Item 4' },
{ id: 5, category: 'B', name: 'Item 5' },
];
const groupedByCategory = originalArray.reduce((acc, item) => {
const key = item.category;
if (!acc[key]) {
acc[key] = [];
}
acc[key].push(item);
return acc;
}, {});
// 结果是一个对象,键是分类,值是该分类下的数组
console.log(groupedByCategory);
方法二:使用 lodash 的 groupBy 方法
如果你项目中使用了 lodash,可以使用它的 groupBy
方法:
javascript
import { groupBy } from 'lodash';
const groupedByCategory = groupBy(originalArray, 'category');
console.log(groupedByCategory);
方法三:在 Vue 3 组件中使用计算属性
javascript
import { computed } from 'vue';
export default {
setup() {
const originalArray = [
{ id: 1, category: 'A', name: 'Item 1' },
{ id: 2, category: 'B', name: 'Item 2' },
// ...其他数据
];
const groupedByCategory = computed(() => {
return originalArray.reduce((acc, item) => {
const key = item.category;
if (!acc[key]) {
acc[key] = [];
}
acc[key].push(item);
return acc;
}, {});
});
return {
groupedByCategory
};
}
};
方法四:转换为数组的数组形式
javascript
const groupedArray = Object.values(
originalArray.reduce((acc, item) => {
const key = item.category;
if (!acc[key]) {
acc[key] = [];
}
acc[key].push(item);
return acc;
}, {})
);
console.log(groupedArray);
// 输出: [
// [{ id: 1, category: 'A', name: 'Item 1' }, { id: 3, category: 'A', name: 'Item 3' }],
// [{ id: 2, category: 'B', name: 'Item 2' }, { id: 5, category: 'B', name: 'Item 5' }],
// [{ id: 4, category: 'C', name: 'Item 4' }]
// ]
在模板中使用
html
<template>
<div v-for="(group, category) in groupedByCategory" :key="category">
<h3>Category: {{ category }}</h3>
<ul>
<li v-for="item in group" :key="item.id">
{{ item.name }}
</li>
</ul>
</div>
</template>