2016-11-20 95 views
0

因此,我正在開發一個項目,並且遇到了一些問題。我需要一個帶有文本區域的HTML頁面,並且我需要在按鈕上單擊計算字母表中每個字母在文本區域中的字符串中的多少個字符。將HTML Textarea內容添加到使用Javascript的字符數組

例如在字符串中

"The Quick Brown Fox Jumps Over the Lazy Dog" 

的結果將是:

A = 1, B = 1, C = 1, O = 4, etc. 

我能想到做到這一點最簡單的方法是將文本區域中的內容轉換爲數組每個數組元素都是一個單獨的字符(如果我可以設法排除空格,這也會是甜蜜的),然後將該數組與第二個數組進行比較,其中每個元素是字母表中的不同字母。

我最大的問題是,我不知道如何做到這一點。正如標題所說,我正在使用Javascript來做這件事,而且我試着在這裏看,以及使用Google,但是我什麼都沒有提出。謝謝你在前進的人誰提供幫助:)

+0

開始在網上搜索...這是一種常見的運動,應該很容易找到大量的使用JavaScript字符串方面 – charlietfl

+0

你可能會認爲例子。但我一直在試圖尋找解決方案,一個小時。但是我想提出的是如何創建一個數組,其中每個元素都是文本區域的下一行。不是字符串中的下一個字符。 – Skitzafreak

回答

1

如何:

var CharOccurrences = {}; 
for(var i=0; i<sTextContent.length; i++){ 
    var c = sTextContent.charAt(i); 
    if(typeof CharOccurrences[c] == 'number'){ 
      CharOccurrences[c]++; 
    }else{ 
     CharOccurrences[c] = 1; 
    } 
} 

CharOccurrences將基本上作爲一個地圖在字符串的每個字符,它會包含每次字符計數發生。


或者,下面可以用來計數ONLY字母表中出現的人物:

var AlphaCharsInText = sTextContent.match(/[a-zA-Z]/g); 
var CharOccurrences = {}; 
for(var i=0; i<AlphaCharsInText.length; i++){ 
    var c = AlphaCharsInText[i]; 
    if(typeof CharOccurrences[c] == 'number'){ 
      CharOccurrences[c]++; 
    }else{ 
     CharOccurrences[c] = 1; 
    } 
} 
+1

小挑剔(我討厭那個人) - 我會charAt()而不是字符串上的數組語法......只是爲了瀏覽器兼容的東西。 +1雖然。 –

+0

@MikeS,正式注意。我會編輯,以包括;) – SpencerD

+0

這是我以前沒有遇到過的東西。在Javascript中,可以將任何字符串寫爲 stringVar [index] 並返回'index'處的任何字符? – Skitzafreak

0

有,要做到這一點,當然,方法很多。這是一個大致遵循我相信你的想法。如果要捕獲所有字符,而不是僅字母數字字符,則可以刪除過濾器語句。

function numChars(str) { 
    var chars = {}; 
    str.split('') 
     .filter(c => /[a-z]/i.test(c)) 
     .map(c => c.toLocaleUpperCase()) 
     .forEach(c => chars[c] = chars[c] + 1 || 1); 
    return chars; 
} 

numChars("The Quick Brown Fox Jumps Over the Lazy Dog"); 

或者,這隻能真正適用於a-z。

function numChars(str) { 
    var chars = Array(26).fill(0); 
    str.split('') 
     .map(c => c.toLocaleUpperCase()) 
     .filter(c => /[A-Z]/.test(c)) 
     .forEach(c => { 
      chars[c.codePointAt(0) - 65]++; 
     }); 
    return chars; //chars[0] = a, chars[1] = b 
} 

numChars("The Quick Brown Fox Jumps Over the Lazy Dog"); 
0

要訪問您將使用其value屬性textarea的內容。 這會產生一個字符串,現在只需要使用它。 要將一個字符串拆分爲一個字符數組,您可以使用split函數來計算要遍歷該數組的每個字符,並遞增通過形式爲character: count的對象構建的計數器。

以下JavaScript使用ES6語法。

// your textarea element 
const ta = document.querySelector('#text') 

// create a handy function 
const count = textarea => { 
    let counts = { } 
    textarea.value.toUpperCase() 
        .split('') 
        .sort() // not really needed but creates a nicer lookign output 
        .forEach(x => counts[x] = (counts[x] || 0) + 1) 
    return counts 
} 

console.log(count) 

當然你也可以在split函數的調用之後添加一個過濾器來只計算字母。

...查看https://jsfiddle.net/z46fgnqh/

0

我只寫了你使用的比賽讓所有的字符出現的次數代碼演示。它正在按照你的要求工作。

var text = "The Quick Brown Fox Jumps Over the Lazy Dog" 
var charArray = text.split(""); 
var charObject ={}; 
for(I=0;I<text.length;I++){ 
var txt = charArray[I]; 
    charObject[txt] = text.match(new RegExp(txt,"gi")).length; 
    } 
    for(x in charObject){ 
    document.write(x +": "+charObject[x] + "<br>"); 
    }