JavaScript 如何按属性值对对象数组进行排序
在本文中,我们将尝试通过一些示例来了解如何在JavaScript中按属性值对对象数组进行排序。
前提: JavaScript中的对象数组
示例:
Input:
[
{ name: "Ram", age: 17 },
{ name: "Mohan", age: 30 },
{ name: "Shyam", age: 15 },
{ name: "Shyam", age: 17 },
]
Output:
[
{ name: 'Shyam', age: 15 },
{ name: 'Ram', age: 17 },
{ name: 'Shyam', age: 17 },
{ name: 'Mohan', age: 30 }
]
解释:
- 选择任意属性,根据数组中其他对象的相同属性值对对象进行排序。
有几种方法可以根据属性值对对象数组进行排序。
- 使用带有比较函数的sort()方法。
- 使用sort()方法。
- 对字符串值使用localeCompare()方法。
方法1:使用带有比较函数的sort()方法
这里我们将使用sort()方法,并在sort方法中明确定义一个比较方法来根据用户的需求进行比较值。然后在compare()方法中,我们将使用if-else语句来检查属性值。
例子: 下面是上述方法的实现。
Javascript
let employees_details = [
{ name: "Ram", age: 17 },
{ name: "Mohan", age: 30 },
{ name: "Shyam", age: 15 },
{ name: "Shyam", age: 17 },
];
let compare = (a, b) => {
if (a.age < b.age) {
return -1;
}
if (a.age > b.age) {
return 1;
}
return 0;
};
employees_details.sort(compare);
console.log(employees_details);
输出
[
{ name: 'Shyam', age: 15 },
{ name: 'Ram', age: 17 },
{ name: 'Shyam', age: 17 },
{ name: 'Mohan', age: 30 }
]
方法2:使用sort()方法
此方法也使用sort()方法,但与之前的方法不同,我们将缩短语法并在内联中完成所有工作。在内联技术中,我们将使用三元运算符的概念来比较两个不同的值,然后返回相应的结果。
示例: 以下是上述方法的实现。
JavaScript
let employees_details = [
{ name: "Ram", age: 17 },
{ name: "Mohan", age: 30 },
{ name: "Shyam", age: 15 },
{ name: "Shyam", age: 17 },
];
employees_details.sort((a, b) => (
a.age > b.age ? 1 : b.age > a.age ? -1 : 0));
console.log(employees_details);
输出
[
{ name: 'Shyam', age: 15 },
{ name: 'Ram', age: 17 },
{ name: 'Shyam', age: 17 },
{ name: 'Mohan', age: 30 }
]
方法3:使用localeCompare()函数对字符串值进行排序
localeCompare() 函数按字母顺序比较字符串。通过按字符串属性对对象进行排序,可以得到按字母顺序排序的数组。
示例:employees_details数组根据name属性使用localeCompare()进行字母顺序排序。
Javascript
let employees_details = [
{ name: "Ram", age: 17 },
{ name: "Mohan", age: 30 },
{ name: "Shyam", age: 15 },
{ name: "Shyam", age: 17 },
];
employees_details.sort((a, b) =>
a.name.localeCompare(b.name));
console.log(employees_details);
输出
[
{ name: 'Mohan', age: 30 },
{ name: 'Ram', age: 17 },
{ name: 'Shyam', age: 15 },
{ name: 'Shyam', age: 17 }
]