Задача https://leetcode.com/problems/reorder-data-in-log-files/ Одно из моих решений прошло все тесты leetcode, а другое падает с ошибкой:
Принято решение:
var reorderLogFiles = (logs)=> {
let head = []
let tail = []
logs.forEach((val, i) => {
if (!isNaN(val.split(" ")[1])) tail.push(val)
else head.push(val)
})
return head.sort((a, b) => {
let aStr = a.replace(/\w* /, ''), bStr = b.replace(/\w* /, '')
return aStr !== bStr ? aStr.localeCompare(bStr) : a.split(" ")[0].localeCompare(b.split(" ")[0])
}).concat(tail)
}
Недопустимое решение:
var reorderLogFiles = (logs) => {
return logs.sort((a, b)=>{
let isDigit1 = !isNaN(a.split(" ")[1]), isDigit2 = !isNaN(b.split(" ")[1])
if (!isDigit1 && !isDigit2) {
let aStr = a.replace(/\w* /, ''), bStr = b.replace(/\w* /, '')
return aStr !== bStr ? aStr.localeCompare(bStr) : a.split(" ")[0].localeCompare(b.split(" ")[0])
}
return isDigit1 ? (isDigit2 ? 0 : 1) : -1;
})
}
контрольный пример
["6p tzwmh ige mc", "ns 566543603829", "ubd cujg j d yf", "ha6 1 938 376 5", "3yx 97 666 56 5", "d 84 34353 2249", "0 tllgmf qp znc", "s 1088746413789", "ys0 splqqxoflgx", "uhb rfrwt qzx r", "u lrvmdt ykmox", "ah4 4209164350", "rap 7729 8 125", "4 nivgc qo z i", "apx 814023338 8"]
Мой вывод в консоли для обоих решений (аналогично ожидаемому ):
["ubd cujg j d yf", "u lrvmdt ykmox", "4 nivgc qo z i", "uhb rfrwt qzx r", "ys0 splqqxoflgx", "0 tllgmf qp znc", "6p tzwmh ige mc", "ns 566543603829", "ha6 1 938 376 5", "3yx 97 666 56 5", "d 84 34353 2249", "s 1088746413789", "ah4 4209164350", "rap 7729 8 125", "apx 814023338 8"]
вывод leetcode для второго решения с этим тестовым примером:
["ubd cujg j d yf","u lrvmdt ykmox","4 nivgc qo z i","uhb rfrwt qzx r","ys0 splqqxoflgx","0 tllgmf qp znc","6p tzwmh ige mc","ns 566543603829","ha6 1 938 376 5","3yx 97 666 56 5","d 84 34353 2249","ah4 4209164350","rap 7729 8 125","apx 814023338 8","s 1088746413789"]
Вот скрипта: https://jsfiddle.net/tomatetz/shj5kn39/9/ Почему вывод jsfiddle и вывод leetcode одна и та же функция отличается?