Javascript сравнивает числа в виде строк - PullRequest
1 голос
/ 11 июля 2019

Я хочу сравнить две строки в JavaScript.Я использую метод localeCompare, но вывод не такой, как ожидалось

116457 < 3085
false

"116457" < "3085"
true

"116457".localeCompare("3085")
-1

Вывод во втором и третьем случае не так, как ожидалось.

Я знаю, что это происходит в лексикографическом порядке, но мне все еще трудно понять, почему это так и как мне это преодолеть.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

4 голосов
/ 11 июля 2019

Если вы хотите сравнить их без преобразования их в числа, вы можете установить numeric: true в options параметре

console.log(
  "116457".localeCompare("3085", undefined, { numeric: true })
)
console.log(
  "116457".localeCompare("3085")
)
3 голосов
/ 11 июля 2019

Если бы 116457 было словом, в словаре оно было бы до 3085.

Рассмотрим словарь с

  • «аппликативным» (длинное слово, начинающееся с «а»,cf длинная строка цифр, начинающаяся с «1»)
  • «copy» (короткое слово, начинающееся с «c», cf более короткая строка цифр, начинающаяся с «3»).
...