跳到主要内容

JavaScript 按属性值对对象数组排序的程序

要理解这个示例,你应该了解以下JavaScript编程主题的知识:

示例1:按属性名排序数组

// 程序:按属性名排序数组

function compareName(a, b) {
// 转换为大写进行不区分大小写的比较
const name1 = a.name.toUpperCase();
const name2 = b.name.toUpperCase();

let comparison = 0;

if (name1 > name2) {
comparison = 1;
} else if (name1 < name2) {
comparison = -1;
}
return comparison;
}

const students = [
{ name: "Sara", age: 24 },
{ name: "John", age: 24 },
{ name: "Jack", age: 25 },
];

console.log(students.sort(compareName));

输出

[{name: "Jack", age: 25},
{name: "John", age: 24},
{name: "Sara", age: 24}]

在上述程序中,使用sort()方法按对象元素的name属性对数组进行排序。

sort()方法根据自定义排序函数(本例中为compareName)返回的值对元素进行排序。

这里,

  • 使用toUpperCase()方法将属性名转换为大写。
  • 如果比较两个名字的结果为1,则它们的顺序被改变。
  • 如果比较两个名字的结果为**-1或0**,则它们的顺序保持不变。

示例2:按属性age排序数组

// 程序:按属性名排序数组

function compareAge(a, b) {
return a.age - b.age;
}

const students = [
{ name: "Sara", age: 24 },
{ name: "John", age: 22 },
{ name: "Jack", age: 27 },
];

console.log(students.sort(compareAge));

输出

[{name: "John", age: 22},
{name: "Sara", age: 24},
{name: "Jack", age: 27}]

在上述程序中,使用sort()方法按对象元素的age属性对数组进行排序。

为了比较两个对象的age属性,我们可以简单地相减。

  • 如果它们的差值是负数,它们的顺序将被改变。
  • 如果它们的差值是正数,顺序保持不变。