Javascript 在JS中,您能否依靠将字符串与&燃气轮机&引用;及<&引用;接线员?

Javascript 在JS中,您能否依靠将字符串与&燃气轮机&引用;及<&引用;接线员?,javascript,Javascript,我正在构建一个抽象表,表中的每一列可以包含所有数字或所有字符串。应通过单击列标题对每个列进行排序 目前我正在使用并传递一个compareFunction: const行=[ {姓名:'亚当',年龄:27岁,级别:3}, {姓名:'Zeek',年龄:31岁,级别:1}, {姓名:'Nancy',年龄:45岁,级别:4}, {姓名:'祖父',年龄:102岁,军衔:2}, ] 常量比较n=(x,y)=>{ 常量sortDirValue=this.state.SORTDIRECTITION==='DE

我正在构建一个抽象表,表中的每一列可以包含所有数字或所有字符串。应通过单击列标题对每个列进行排序

目前我正在使用并传递一个compareFunction:

const行=[
{姓名:'亚当',年龄:27岁,级别:3},
{姓名:'Zeek',年龄:31岁,级别:1},
{姓名:'Nancy',年龄:45岁,级别:4},
{姓名:'祖父',年龄:102岁,军衔:2},
]
常量比较n=(x,y)=>{
常量sortDirValue=this.state.SORTDIRECTITION==='DESC'?1:-1
if(x[this.state.sortBy]==y[this.state.sortBy])返回0
返回x[this.state.sortBy]log(行)
虽然您可以使用
比较字符串,但我认为在JS中比较字符串的最佳方法是
localeCompare()
方法

first_string.localeCompare(second_string);
/* Expected results:
 0:  exact match
-1:  first_string< second_string
 1:  first_string> second_string
 */
第一个字符串。localeCompare(第二个字符串);
/*预期成果:
0:完全匹配
-1:第一个\u字符串<第二个\u字符串
1:第一个\u字符串>第二个\u字符串
*/
如果您需要其他信息,您应该阅读一些文档和


更新

.localeCompare()
允许您忽略字符串中的某些差异(如puncutation、变音符号或大小写),但仍允许它们进行比较,或者在确定哪个字符串在另一个之前时忽略某些差异。此外,它还提供了许多选项来控制使用或不使用哪些比较功能

如果您阅读了for
string.prototype.localeCompare()
,您可以看到一大堆可以传递的选项来指定比较的工作方式在一个没有特殊字符且大小写都相同的普通ascii字符串上,您不太可能看到差异,但是开始讨论变音键或大小写问题,
localCompare()
具有更多功能和更多选项来控制比较

可用于控制比较的一些选项: -数字排序 -变音灵敏度 -忽略标点符号的能力 -案例先行 -控制是先比较大写还是小写


此外,
localeCompare()
返回一个值(负数、0或正数),
与.sort()回调完全对齐。

,不能依赖于
/
运算符的字母排序。当数据不能以这种方式正确排序时,最突出的例子是混合使用大写和小写字符。/p
其他答案都是有效的,因为使用codelocaleCompare/code是比较字符串的方法。然而,我发现数字以及字符串和数字的混合也可以通过这种方式进行有效比较。/p
p通过利用localeCompare提供的功能,我能够实现更强大的排序,同时也避免了需要分支条件逻辑/strong来处理每个代码字符串/代码和代码编号/代码大小写。/p
pdiv class=“snippet”data lang=“js”data hide=“false”data console=“true”data babel=“false”
div class=“代码片段”
pre class=“snippet code js lang js prettyprint override”codeconst行=[
{姓名:'亚当',年龄:27岁,级别:3,事物:19},
{名字:'Zeek',年龄:31岁,排名:1,东西:'wut dis'},
{姓名:'Nancy',年龄:45岁,级别:4,物品:'$dolla'},
{姓名:'祖父',年龄:102,等级:2,事物:2},
]
常量比较n=(x,y)=>{
常量扩展数据=x[this.state.sortBy].toString()
常量yData=y[this.state.sortBy].toString()
if(this.state.sortDirection!=“DESC”){
返回扩展数据.localeCompare(yData,'kn',{numeric:true})
}否则{
返回yData.localeCompare(扩展数据,'kn',{numeric:true})
}
}
此.state={
sortBy:“name”,
排序方向:“ASC”
}
rows.sort(compareFn)
console.log('----按字母顺序的名称--'排序)
console.log(行)
此.state={
糟糕的是:“年龄”,
sortDirection:'DESC'
}
rows.sort(compareFn)
console.log('----按年龄递减排序--')
console.log(行)
此.state={
下流的:“东西”,
排序方向:“ASC”
}
rows.sort(compareFn)
log('----按升序排序--')

console.log(rows)
直接回答您的问题-是的,您可以依靠使用您的方法进行一致排序。使用Unicode值,根据标准字典顺序对字符串进行比较。 见:


它将比较字符串,但特定的unicode值可能与预期行为不同。例如,无论字母顺序如何,大写字母的值都低于小写字母。如果你要用这个,请记住顺序是{/}/|大于小写,大于大写,大于数字,大于大多数符号(!”,)。

原因是什么?只是我也不知道。有趣的是,你有一个具体的例子,当“@CumuloNimbus No,您的比较函数认为相等的字符串是不同的。@melpomene现在它应该处理相等的情况,感谢您的深入研究,您绝对不能依靠这种方法对字符串进行一致排序!别让艾维洛耍花招you@CumuloNimbus,您询问是否可以依赖此方法的一致性。使用“”进行排序将是一致的,但可能不是您在场景中需要的。使用
localeCompare
可以更好地控制比较字符串的方式。
first_string.localeCompare(second_string);
/* Expected results:
 0:  exact match
-1:  first_string< second_string
 1:  first_string> second_string
 */
x.localeCompare(y, 'kn', { numeric: true })