Pie*_*er 6 javascript arrays sorting typescript angular
我正在尝试按 2 个字段对数组进行排序。我有一个布尔值:isFavorite 和一个字符串:名称。所有为真的布尔值必须是第一项。但我希望数组是按字母顺序排列的。到目前为止,这是我的代码(尝试了多种方法):
data.sort(function (x,y) {
if (x.isFavorite){
return -1;
}
if (x.isFavorite && !y.isFavorite && (x.name < y.name)){
return -1;
} else if ((x.isFavorite === y.isFavorite) && (x.name === y.name)){
return 0;
} else if (x.isFavorite && y.isFavorite && (x.name < y.name)){
return -1;
} else if (!x.isFavorite && !y.isFavorite && (x.name > y.name)){
return 1;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这么多条件和重叠?
只需使用logical OR
运算符即可按两个字段对数组进行排序。
另外,我使用+ (Boolean)
以强制转换为Number。
grouperArray.sort((a, b) => (+a.isFavorite) - (+b.isFavorite) || a.name.localeCompare(b.name));
Run Code Online (Sandbox Code Playgroud)
grouperArray.sort((a, b) => (+a.isFavorite) - (+b.isFavorite) || a.name.localeCompare(b.name));
Run Code Online (Sandbox Code Playgroud)
你的问题是前两个if
是重叠的,第二个if
是无法到达的,如果x.isFavorite
是true
那么第一个if
将无法到达return
。
另外,您没有检查某些场景,例如y.isFavorite
是true
和x.isFavorite
不是。
你可以把它写成
if ( x.isFavorite != y.isFavorite )
{
return x.isFavorite ? -1 : 1;
}
else
{
return x.name.localeCompare( y.name );
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4282 次 |
最近记录: |