按字符串类型的多个属性对对象数组进行排序
Sort array of objects by multiple properties of string type
我在 JavaScript 中根据名称对我的数组进行排序,然后我在 joinDate
中对它进行排序,但不知何故它没有检查 joiningDate
.
不幸的是,我不能使用 if-else 条件 - 我只想使用三元运算符。
我的代码是这样的:
person.sort(((a, b) => (a.name > b.name) ? 1 : (a.joinDate > b.joinDate) ? 1 : -1));
它正在对名称进行排序,而不是对 joinDate
属性
进行排序
我的列表是这样的:
{
"data": [
{
"id": "fdsf",
"name": "Julie",
"joinDate": "01/10/2019"
},
]
}
测试应该是
if (a.name > b.name) {
return 1;
} else if (a.name < b.name) {
return -1;
} else if (a.joindate > b.joindate) {
return 1;
} else if (a.joindate < b.joindate) {
return -1;
} else {
return 0;
}
您的比较函数没有正确涵盖所有可能的情况。
相反,您可以使用 String.prototype.localeCompare()
按 name
或 joinDate
(当名称相同时)排序:
person.sort((a,b) =>
a.name.localeCompare(b.name) || a.joinDate.localeCompare(b.joinDate))
我想,这种方法更容易扩展到任意数量的排序参数。
我在 JavaScript 中根据名称对我的数组进行排序,然后我在 joinDate
中对它进行排序,但不知何故它没有检查 joiningDate
.
不幸的是,我不能使用 if-else 条件 - 我只想使用三元运算符。
我的代码是这样的:
person.sort(((a, b) => (a.name > b.name) ? 1 : (a.joinDate > b.joinDate) ? 1 : -1));
它正在对名称进行排序,而不是对 joinDate
属性
我的列表是这样的:
{
"data": [
{
"id": "fdsf",
"name": "Julie",
"joinDate": "01/10/2019"
},
]
}
测试应该是
if (a.name > b.name) {
return 1;
} else if (a.name < b.name) {
return -1;
} else if (a.joindate > b.joindate) {
return 1;
} else if (a.joindate < b.joindate) {
return -1;
} else {
return 0;
}
您的比较函数没有正确涵盖所有可能的情况。
相反,您可以使用 String.prototype.localeCompare()
按 name
或 joinDate
(当名称相同时)排序:
person.sort((a,b) =>
a.name.localeCompare(b.name) || a.joinDate.localeCompare(b.joinDate))
我想,这种方法更容易扩展到任意数量的排序参数。