2016-11-20 7 views
0

私はプロジェクトに取り組んでおり、少し問題があります。私は、テキストエリアを持つHTMLページを持っている必要があり、ボタンをクリックする必要があります。アルファベットの各文字の数が上記のテキストエリアの文字列に含まれているかを計算します。文字列中の例えばJavaScriptを使用したHTML Textareaの文字配列へのコンテンツ

"The Quick Brown Fox Jumps Over the Lazy Dog" 

結果は次のようになります。

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

私はこれを行うに考えることができる最も簡単な方法は、アレイへのテキストエリアの内容を変換することです各配列要素は1つの文字(スペースを除外することができればそれも甘いだろう)であり、次にその配列を2番目の配列と比較すると、各要素はアルファベットの異なる文字になります。

私の最大の問題は、これをどうやって行うのか分かりません。タイトルは私がこれにJavascriptを使用していると言っているので、私はここで見てみるだけでなく、Googleを使ってみたが、何も出てこない。ヘルプを提供しています誰のために事前にありがとう:)

+0

これは一般的な練習であり、javascriptの文字列の用語を使用してたくさんの例を見つけるのは非常に簡単なはずです – charlietfl

+0

あなたはそう思います。しかし、私は1時間この解決策を模索しようとしてきました。しかし、私が考えているのは、各要素がテキスト領域の次の行である配列を作成する方法です。文字列の次の文字ではありません。 – 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属性を使用します。 これは文字列になります。これで作業するだけです。 文字列を文字の配列に分割するには、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) 

もちろん、スプリット機能の呼び出し後に文字をカウントするだけのフィルタを追加することもできます。

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>"); 
    } 
関連する問題