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

Neh*_*rma -3 javascript arrays conditional-operator reactjs react-native

我在 JavaScript 中根据名称对数组进行排序,然后我根据 injoinDate对其进行排序,但不知何故它没有检查joiningDate.

不幸的是,我不能使用 if-else 条件 - 我只想使用三元运算符。

我的代码是这样的:

person.sort(((a, b) => (a.name > b.name)  ? 1 : (a.joinDate > b.joinDate) ? 1 : -1));
Run Code Online (Sandbox Code Playgroud)

它正在对名称进行排序,但不对joinDate属性进行排序

我的清单是这样的:

{
"data": [
     {
         "id": "fdsf",
         "name": "Julie",
         "joinDate": "01/10/2019"

      },
    ]
}
Run Code Online (Sandbox Code Playgroud)

Yev*_*kov 6

您的比较功能并未正确涵盖所有可能的情况。

相反,您可以使用或(当名称相同时)像这样String.prototype.localeCompare()排序:namejoinDate

person.sort((a,b) => 
   a.name.localeCompare(b.name) || a.joinDate.localeCompare(b.joinDate))
Run Code Online (Sandbox Code Playgroud)

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


650*_*502 5

测试应该是

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 关于那个三元......请不要对下一个必须破译您的代码的人这样做:) (3认同)
  • 或者用疯狂的三元组:`a.name &gt; b.name?1:a.名称&lt;b.名称?-1:a.加入日期&gt; b.加入日期?1:a.joindate &lt; b.joindate ?-1:0` (2认同)