Javascript将数字作为字符串进行比较

Javascript将数字作为字符串进行比较,javascript,string-comparison,Javascript,String Comparison,我希望比较javascript中的两个字符串。我使用的是localeCompare方法,但输出不符合预期 116457 < 3085 false "116457" < "3085" true "116457".localeCompare("3085") -1 116457

我希望比较javascript中的两个字符串。我使用的是localeCompare方法,但输出不符合预期

116457 < 3085
false

"116457" < "3085"
true

"116457".localeCompare("3085")
-1
116457<3085
假的
"116457" < "3085"
真的
“116457”。本地比较(“3085”)
-1
第二种和第三种情况下的输出不符合预期

我知道它是按字典顺序排列的,但我仍然很难理解为什么会这样以及我应该如何克服这一点


如果116457是一个单词,在字典里它会出现在3085之前

考虑一本带有

  • “applicative”(以“a”开头的长单词,以“1”开头的长数字字符串)
  • “复制”(以“c”开头的短单词,以“3”开头的短数字字符串)

如果要比较它们而不将它们转换为数字,可以在参数中进行设置

console.log(
“116457”.localeCompare(“3085”,未定义,{numeric:true})
)
console.log(
“116457”。本地比较(“3085”)

)
“1”
位于
“3”
之前,因此以
“1”
开头的任何字符串都位于以
“3”
开头的任何其他字符串之前。你说你知道这一点,但很难理解为什么。您是否同意
“a”<“c”
?这些字符串始终是整数?如果是,为什么不使用
parseInt(str)
?实际上不是。在我正在处理的场景中,它们并不总是整数“我应该如何克服这个问题”:如果您想要解决方案的建议,您必须更具体地说明需求是什么。您的输入有什么样的模式,您希望它们如何排序?你说“c-3085”可能发生;“a-5”、“b-1”和“a-b+7-c+1”也会出现吗?它们应该如何排序?谢谢大家的帮助。我将编写自己的函数!可以有道理,但我如何克服这一点呢?(我不想把它转换成数字)把它转换成数字?“我不想”。。。为什么呢?我基本上不能使用parseInt(str)或Number(str)强制转换它,因为在我处理的场景中,它并不总是得到整数。有些情况下,我也得到字符串。例如:“c-116457”和“c-3085”如果你有复杂的字符串,其中不同的子字符串都有特定的含义,那么你必须编写自己的比较器函数,将所有这些都纳入一个计算中。以不同的方式表示数据可能更有效,例如,将数据表示为具有一组属性的对象,而不是字符串。