2013-10-26 52 views
0

我想要統計文本區域的單詞,字符和行數。 這是我的代碼: 這是完美的嗎?獲取文本區域的統計信息(單詞,行,字符)

function getStats() { 
    var text = textarea.value, 
    chars = text.length, 
    words = text.split(/\S+/g).length - 1, 
    lines = text.split("\n").length; 
    return lines + " lines, " + words + " words, " + chars + " chars"; 
} 

是否有更正?

+0

'textarea'定義在哪裏? –

+0

'docment.getElementById(「textarea」)' – b134692

+2

如果這是關於如何改進代碼,而不是代碼的問題,http://codereview.stackexchange.com/可能是一個更好的地方發佈這個。 – Zirak

回答

5

雖然它可能工作得很好,還有就是你是如何做的事情更多一些先天問題。

首先,你正在使用一個全局變量(或者至少不是局部變量)。您的函數依賴於textarea變量,該變量在函數之外定義,因此不靈活且難以測試。相反,爲什麼不接受一個textarea元素來檢查?或者甚至更好,而不是在元素上操作,在字符串上操作?這在概念上會更有意義(統計不是元素,而是其值),並創建更靈活的代碼。

其次,你的函數被隱約命名。 getStats?獲取統計什麼?這些統計數據是什麼?他們是24歲男性的平均身高嗎?將函數重命名爲更有意義的內容將極大地改善它。第三,你的函數做了兩件事:它既計算textarea的統計量,然後用字符串格式化它們。但是如果不是那個字符串,你想以不同的格式呢?或者只是行數,而不是其他任何東西?爲什麼不返回一個數據結構(一個簡單的對象),而用這些統計信息呢?這樣你可以用任何你想要的方式格式化數據。

第四,你對一個詞的定義有點奇怪。定義一個詞很困難,而你的定義說.(和其他)本身就是一個詞,所以hello !由兩個詞組成,而不是一個。那是對的嗎?

+0

是啊,你是誰。但是你能告訴我關於如何正確計算單詞的任何想法嗎? – b134692

+0

這很大程度上取決於您對單詞的定義。最基本的是全局匹配'\ w +',但是你必須問自己,「[email protected]」是一個單詞還是三個? – Zirak

2

您可以將textareaid傳遞給函數。

function getStats(textarea) { 
    var text = document.getElementById(textarea).value, 
    chars = text.length, 
    words = text.split(/\S+/g).length - 1, 
    lines = text.split("\n").length; 
    return lines + " lines, " + words + " words, " + chars + " chars"; 
} 

我個人也願意與字符,文字和線條,而不是返回字符串object

function getStats(textarea) { 
    var text = document.getElementById(textarea).value; 
    return { 
     chars : text.length, 
     words : text.split(/\S+/g).length - 1, 
     lines : text.split("\n").length 
    } 
} 
+2

如果你想對某個元素進行操作,*不要傳遞一個id並選擇它*。它假設兩件事:(1)元素有一個id; (2)元素在DOM中。相反,接受textarea元素,不要自己選擇它。 – Zirak

1

可以實現上述使用小的JavaScript代碼的功能,

。請看看此鏈接:www.jsfiddle.net/MrbUK/

參考鏈接:http://textmechanic.co/Count-Text.html

對於行計數的數量: Textarea.value.split(/ \ N /)長度

+0

您可以結合上面的鏈接結果代碼,獲得您的預期輸出。 –

5
function getStats() { 
    var text = textarea.value, 
    chars = text.length, 
    words = text.split(/\s+/g).length, 
    lines = text.split("\n").length; 
    return lines + " lines, " + words + " words, " + chars + " chars"; 
} 

上面的代碼工作正常。你可以這樣做優化代碼一點點:中

words = text.split(/s+/g).length 

代替

words = text.split(/S+/g).length - 1; 
+0

' - 1'是必需的 – b134692