gpt4 book ai didi

javascript - 在 TypeScript 中执行区分大小写的字符串排序

转载 作者:行者123 更新时间:2023-12-01 16:17:30 24 4
gpt4 key购买 nike

我有一个数组,看起来像

var arr = [{'Id':'1','Value':'Desk'},
{'Id':'2','Value':'skool'},
{'Id':'3','Value':'OT'},
{'Id':'4','Value':'sector'},
{'Id':'5','Value':'Security'},
{'Id':'6','Value':'Zebra'},

我想对这个数组进行排序以获得结果

[
{ Id: '1', Value: 'Desk' },
{ Id: '3', Value: 'OT' },
{ Id: '4', Value: 'sector' },
{ Id: '2', Value: 'skool' },
{ Id: '5', Value: 'Security' },
{ Id: '6', Value: 'Zebra' }
]

我试过

arr.sort((a,b) => (a.Value.toLocaleLowerCase() > b.Value.toLocaleLowerCase()) ? 1 : ((b.Value.toLocaleLowerCase() > a.Value.toLocaleLowerCase()) ? -1 : 0)); 

这给了我一个结果

[
{ Id: '1', Value: 'Desk' },
{ Id: '3', Value: 'OT' },
{ Id: '4', Value: 'sector' },
{ Id: '5', Value: 'Security' },
{ Id: '2', Value: 'skool' },
{ Id: '6', Value: 'Zebra' }
]

区别在于skoolSecurity 的顺序。我希望我所有的小写字母都先出现,然后是大写字母。我可以尝试什么来实现这一点?

最佳答案

你想按字母顺序还是大小写排序?如果您按字母顺序排序,则无法获得 Securityskool 之后因为按字母顺序,ek 之前.

如果你想那样-

  • 如果两个单词的首字母相同,则不考虑进一步的字母顺序,先将小写字母排序。

在这种情况下,您可以使用以下 -

var arr = [{
Id: '1',
Value: 'Desk'
},
{
Id: '3',
Value: 'OT'
},
{
Id: '4',
Value: 'sector'
},
{
Id: '2',
Value: 'skool'
},
{
Id: '5',
Value: 'Security'
},
{
Id: '6',
Value: 'Zebra'
}
];


arr.sort(function(a, b) {
//if exactly same strings, return 0
if (a.Value === b.Value)
return 0;
//if first case of a and b are unequal return based on case
if (a.Value.toLocaleLowerCase()[0] === b.Value.toLocaleLowerCase()[0] && a.Value[0] !== b.Value[0])
return a.Value[0] < b.Value[0] ? 1 : -1;
//Now return 0 if both are equal in lower case else return 1 or -1 depending on comparison below
if (a.Value.toLocaleLowerCase() === b.Value.toLocaleLowerCase())
return 0;
return a.Value.toLocaleLowerCase() > b.Value.toLocaleLowerCase() ? 1 : -1;

});


//Apparently below code is not the exactly right way to do it, so use the above method
//arr.sort((a, b) => (a.Value.toLocaleLowerCase()[0] === b.Value.toLocaleLowerCase()[0]) ? (a.Value[0] > b.Value.[0]?1:-1) : (a.Value.toLocaleLowerCase() > b.Value.toLocaleLowerCase()?1:-1));

console.log(arr);

在上面的代码片段中,如果任意两个单词的首字母相同,它们将根据首字母的大小写进行排序。在所有其他情况下,它将按字母顺序排序。

编辑: 根据评论建议,对于 TS 中的排序函数,它应该返回 -

  • 1 :当a > b ,
  • 0 :当a === b
  • -1 :当a < b .

因此,答案中提到了更正确(以及可读)的版本。

希望对您有所帮助!

关于javascript - 在 TypeScript 中执行区分大小写的字符串排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62333473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com