按字符串类型的多个属性对对象数组进行排序

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()namejoinDate(当名称相同时)排序:

person.sort((a,b) => 
   a.name.localeCompare(b.name) || a.joinDate.localeCompare(b.joinDate))

我想,这种方法更容易扩展到任意数量的排序参数。