#javascript #string #sorting #join #comparison
#javascript #строка #сортировка #Присоединиться #сравнение
Вопрос:
Я относительно новичок в Javascript (сначала изучил Ruby), но был очень смущен некоторыми странными несоответствиями, которые я видел, и я пытаюсь выяснить, каковы основные механизмы, чтобы я мог лучше понять язык. Одним из них является то, что когда я выполняю сравнение, не должно иметь значения, на какой стороне знака === находятся два элемента, но я видел, как это происходит, и не понимаю, почему. Вот пример для базовой функции, чтобы увидеть, отсортирована ли строка в алфавитном порядке или нет:
Эта версия всегда возвращает true:
function sorted(str) {
var arr = str.split("");
return arr.sort().join('') === arr.join('');
}
sorted('abc') // => true
sorted('cba') // => true
В то время как это вернет правильный ответ:
function sorted(str) {
var arr = str.split("");
return arr.join('') === arr.sort().join('');
}
sorted('abc') // => true
sorted('cba') // => false
Я пытался разобраться в этом и довольно застрял — кто-нибудь может помочь объяснить?
Спасибо!
Ответ №1:
В отличие от большинства методов Array.prototype
, sort()
манипулирует объектом на месте. Следовательно, в вашем первом фрагменте arr
во втором операнде ===
уже отсортирован, и сравнение всегда возвращается true
.