假设我们有一个对象数组,每个对象有三个属性:name、score和age,用age的降序,然后在用score的升序排序,请用js实现这个功能
时间: 2024-02-13 19:06:53 浏览: 65
可以使用JavaScript内置的sort()方法来对对象数组进行排序。假设我们有一个对象数组,每个对象有三个属性:name、score和age。我们可以使用以下代码对数组按照要求进行排序:
```javascript
let arr = [
{ name: 'Alice', score: 80, age: 25 },
{ name: 'Bob', score: 90, age: 19 },
{ name: 'Charlie', score: 75, age: 30 }
];
arr.sort(function(a, b) {
if (b.age !== a.age) {
return b.age - a.age; // 先按照age的降序排序
} else {
return a.score - b.score; // 再按照score的升序排序
}
});
console.log(arr);
```
输出结果为:
```
[
{ name: 'Charlie', score: 75, age: 30 },
{ name: 'Alice', score: 80, age: 25 },
{ name: 'Bob', score: 90, age: 19 }
]
```
如果要按照score的降序排序,只需要将比较函数中的`a.score - b.score`改为`b.score - a.score`即可。
相关问题
javascript怎么对数组对象里的4元素进行按我的要求任意排序案例const arr = [ { name: '张三', age: 20, score: 80, grade: 'A' }, { name: '李四', age: 18, score: 70, grade: 'B' }, { name: '王五', age: 22, score: 90, grade: 'A' }, { name: '赵六', age: 19, score: 85, grade: 'A' }, ];我想讲score排到age的前面怎么弄
如果想要将`score`排到`age`的前面,可以修改比较函数的实现,将`score`的比较放在`age`的前面。修改后的代码如下:
```javascript
const arr = [
{ name: '张三', age: 20, score: 80, grade: 'A' },
{ name: '李四', age: 18, score: 70, grade: 'B' },
{ name: '王五', age: 22, score: 90, grade: 'A' },
{ name: '赵六', age: 19, score: 85, grade: 'A' },
];
// 按照分数降序,年龄升序,成绩等级升序排序
arr.sort((a, b) => {
if (a.score !== b.score) {
return b.score - a.score;
}
if (a.age !== b.age) {
return a.age - b.age;
}
if (a.grade !== b.grade) {
return a.grade.localeCompare(b.grade);
}
return 0;
});
console.log(arr);
// 输出:[
// { name: '王五', age: 22, score: 90, grade: 'A' },
// { name: '赵六', age: 19, score: 85, grade: 'A' },
// { name: '张三', age: 20, score: 80, grade: 'A' },
// { name: '李四', age: 18, score: 70, grade: 'B' }
// ]
```
这里的排序规则是按照分数降序,年龄升序,成绩等级升序排序。首先比较分数,如果分数相同,再比较年龄,如果年龄相同,再比较成绩等级。这样,`score`就会排到`age`的前面。
const arr = [ { name: '张三', age: 20, score: 80, grade: 'A' }, { name: '李四', age: 18, score: 70, grade: 'B' }, { name: '王五', age: 22, score: 90, grade: 'A' }, { name: '赵六', age: 19, score: 85, grade: 'A' }, ];我想讲score排到age的前面怎么弄
如果想要将`score`排到`age`的前面,可以先将数组对象中的`score`属性剔除出来,然后将剩余的属性进行排序,最后再将`score`属性插入到排序结果的前面。代码如下:
```javascript
const arr = [
{ name: '张三', age: 20, score: 80, grade: 'A' },
{ name: '李四', age: 18, score: 70, grade: 'B' },
{ name: '王五', age: 22, score: 90, grade: 'A' },
{ name: '赵六', age: 19, score: 85, grade: 'A' },
];
const scores = arr.map(item => item.score); // 获取分数数组
const rest = arr.map(item => ({ name: item.name, age: item.age, grade: item.grade })); // 获取除分数外的其它属性
rest.sort((a, b) => {
if (a.age !== b.age) {
return a.age - b.age;
}
if (a.grade !== b.grade) {
return a.grade.localeCompare(b.grade);
}
return 0;
}); // 按照年龄升序、成绩等级升序排序
const result = rest.map((item, index) => ({ ...item, score: scores[index] })); // 组合成新的对象数组
console.log(result);
// 输出:[
// { name: '李四', age: 18, grade: 'B', score: 70 },
// { name: '赵六', age: 19, grade: 'A', score: 85 },
// { name: '张三', age: 20, grade: 'A', score: 80 },
// { name: '王五', age: 22, grade: 'A', score: 90 }
// ]
```
这里的排序规则是按照年龄升序、成绩等级升序排序,最后将分数属性插入到排序结果的前面,得到最终的排序结果。
阅读全文