const objArr = [ { name: "小王", age: 13 }, { name: "小王", age: 14 }, { name: "小张", age: 12 }, { name: "小何", age: 16 }, { name: "小王", age: 17 }, { name: "小张", age: 12 }, { name: "小张", age: 12 }, { name: "小何", age: 12 }, { name: "小何", age: 18 }, { name: "小王", age: 12 }, { name: "小王", age: 12 }, { name: "小王", age: 12 }, ];进行排序, name一样的排在一起
时间: 2024-02-27 13:54:22 浏览: 64
好的,您想要对这个数组按照 name 属性进行排序,且每个 name 相同的元素排在一起。我们可以使用 Array.prototype.reduce() 方法来实现:
```javascript
const sortedObjArr = objArr.reduce((acc, curr) => {
// 找到已经存在的 name 对应的数组
const existingArr = acc.find(item => item[0].name === curr.name);
if (existingArr) {
// 如果已经存在,则将元素添加到该数组中
existingArr.push(curr);
} else {
// 如果不存在,则创建一个新的数组并添加到结果数组中
acc.push([curr]);
}
return acc;
}, []);
// 对每个 name 对应的数组进行排序
sortedObjArr.forEach(arr => {
arr.sort((a, b) => a.age - b.age);
});
// 将结果数组展平
const flattenedArr = sortedObjArr.flat();
console.log(flattenedArr);
```
这里使用 reduce() 方法来将原数组转换成一个新的数组。在 reduce() 方法中,我们遍历原数组,对于每个元素,我们检查是否已经存在一个 name 属性相同的数组。如果存在,我们将元素添加到该数组中;如果不存在,我们创建一个新的数组并将其添加到结果数组中。最终,我们对每个 name 对应的数组进行排序,然后展平结果数组。
输出结果如下:
```
[
{ name: '小王', age: 12 },
{ name: '小王', age: 12 },
{ name: '小王', age: 12 },
{ name: '小王', age: 13 },
{ name: '小王', age: 14 },
{ name: '小王', age: 17 },
{ name: '小张', age: 12 },
{ name: '小张', age: 12 },
{ name: '小张', age: 12 },
{ name: '小何', age: 12 },
{ name: '小何', age: 16 },
{ name: '小何', age: 18 }
]
```
阅读全文