2012-10-22 61 views
2

我有一個簡單的問題。 我想寫一個字符串比較器函數,它會返回一個數字來指示第一個字符串是小於,等於還是大於第二個字符串。Javascript字符串比較功能

顯然,最簡單的解決方法是:

function compare (x, y){ 
    return x < y ? -1 : (x === y ? 0 : 1); 
} 

然而,這並不是一個非常有效的一個,因爲字符串進行兩次比較。另一方面,實現一個典型的教科書解決方案(迭代兩個字符串並比較各個位置中的字符)可能會更加低效,因爲Javascript沒有單個字符的概念 - 而是有一個字符串。

那麼,有沒有使用一些內置的JavaScript功能(ES5,也許?)有一個這樣的功能的有效實現或我們堅持與上述代碼?

+0

你的三元運算符缺少a:所以我修正了它,再加上我給你的函數一個名字。 – epascarello

+0

哎呀,對不起。謝謝。 – mark

+0

您是否看到我對內置方法的評論不是更快?僅僅因爲它是「語言」的一部分並不意味着它「更好」。 – epascarello

回答

4

也許你應該檢查localeCompare函數?這正是它的目的:比較字符串。 )

+0

我怎麼會錯過它? – mark

+3

是的,但你想要更快的權利?內置並不總是更快。試一試http://jsperf.com/looking-at-localcompare – epascarello

+0

尤其是考慮到localCompare的實現處理[不僅僅是你想要的東西](https://developer.mozilla.org/en-美國/文檔/網絡/的JavaScript /參考/ Global_Objects /字符串/ localeCompare)。 – matanster