JavaScript 将列表依据元素的某个属性拆分成多个小列表,再将小列表按照某个属性排序之后将小列表中元素的某个属性组为数组
时间: 2023-12-01 22:05:01 浏览: 31
好的,你的问题是如何用 JavaScript 将列表依据元素的某个属性拆分成多个小列表,再将小列表按照某个属性排序之后将小列表中元素的某个属性组为数组。
这个问题可以分成两部分来解决:
第一部分:将列表按照某个属性拆分成多个小列表
可以使用 Array.reduce() 方法来将列表按照某个属性拆分成多个小列表,具体实现代码如下:
```javascript
const list = [
{ id: 1, type: 'A', value: 'value1' },
{ id: 2, type: 'B', value: 'value2' },
{ id: 3, type: 'A', value: 'value3' },
{ id: 4, type: 'C', value: 'value4' },
{ id: 5, type: 'B', value: 'value5' },
];
const grouped = list.reduce((acc, current) => {
const key = current.type;
(acc[key] ? acc[key] : (acc[key] = [])).push(current);
return acc;
}, {});
console.log(grouped);
```
运行结果如下:
```javascript
{
A: [
{ id: 1, type: 'A', value: 'value1' },
{ id: 3, type: 'A', value: 'value3' }
],
B: [
{ id: 2, type: 'B', value: 'value2' },
{ id: 5, type: 'B', value: 'value5' }
],
C: [ { id: 4, type: 'C', value: 'value4' } ]
}
```
第二部分:将小列表按照某个属性排序之后将小列表中元素的某个属性组为数组
可以使用 Array.map() 方法和 Array.sort() 方法来将小列表按照某个属性排序之后将小列表中元素的某个属性组为数组,具体实现代码如下:
```javascript
const sortedAndGrouped = Object.keys(grouped).reduce((acc, key) => {
acc[key] = grouped[key]
.sort((a, b) => a.value.localeCompare(b.value))
.map((item) => item.value);
return acc;
}, {});
console.log(sortedAndGrouped);
```
运行结果如下:
```javascript
{
A: [ 'value1', 'value3' ],
B: [ 'value2', 'value5' ],
C: [ 'value4' ]
}
```
以上就是解决你的问题的完整代码,希望能够帮到你。