2016-08-15 18 views
0

JSBinを使用して入力文字列を受け入れるためのJSコードのブロックを作成し、文字列に含まれる各文字を返す(重複する文字やその他の文字を削除する)各文字は文字列で利用されました。私は追加演習のための正規表現を統合しようとしています。各文字の頻度をカウントする -

私が書いたコードは重複を削除するものではなく、各文字の頻度を適切に数えていません。誰かが私が間違ったことを教えてもらえますか?ここで

はHTMLである:ここでは

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width"> 
    <title>JS Bin</title> 
</head> 
<body> 
    <input type="text" id="input"></input> 
    <button onclick="count()">Count letters</button> 
    <br> 
    <br> 
    <div id="output">Result</div> 
</body> 
</html> 

はJSです:

function count() { 
    var x = document.getElementById("input").value.toString(); 
    var y = ""; 
    var z = []; 

//Removal of white spaces and other characters. 

    x = x.replace(/[^a-z]/gi,""); 

//Elimination of duplicate letters. 

    for (var i = 0; i < x.length; i++) { 
    if (/x.charAt(i)/i.test(y) === false) { 
     y += x.charAt(i); 
    } 
    } 

//Count how many of each letter exists within the input string. 

    for(var i = 0; i < y.length; i++) { 
    for (var j = 0; j < y.length; j++) { 
     var freq = 0; 
     if (y.charAt(i) == y.charAt(j)) { 
     freq += 1; 
     } 
     z.push(freq); 
    } 
    } 

//Write result to HTML document. 

    for (var i = 0; i < y.length; i++) { 
    document.write(y.charAt(i)); 
    document.write(", "); 
    document.write(z[i]); 
    document.write("<br>"); 
    } 
} 

あなたの助けをありがとうございました!

+0

、単一文字の変数名を使用しないでくださいしてくださいしてください。 'x'、' y'、 'z'は説明的なものではなく、今から今月の意味を理解することさえできません。また、なぜあなたは "重複"文字を削除していますか?正確にはどういう意味ですか?何を削除しようとしていますか? –

+0

わかりました - 私は練習としてクイックコードを書いています。削除しています。私は保つつもりのプロジェクトにもっと記述的な変数を使用したいと思います。混乱を招いて申し訳ありません。 – CJamz

+0

重複を削除するには、基本的に "hello"をとり、 "helo"に変換したい - 最初の文字列には文字lの2つのインスタンスがあるので、出力はh 1、e 1、l 2、 、お互いの手紙の1つのインスタンス。 – CJamz

答えて

0

あなたは複雑すぎると思っています。ただ、正規化された文字列を反復処理し、文字を数える:

window.count = function() { 
    var input = document.getElementById("input").value.toString(); 
    var result = {}; 

    input = input.replace(/[^a-z]/gi,""); 
    var letters = input.split(''); 
    for(index in letters) { 
    result[letters[index]] = result[letters[index]] +1 || 1; 
    } 
    document.querySelector('#output').innerHTML = JSON.stringify(result); 
} 

demo fiddle

+0

ありがとうBogdan!ずっと簡単です。 – CJamz

0

あなたは、単一の置き換え機能でそれを行うことができます。これは一例です。

function getFreq(str){ 
 
     var freq={};//an object to fill 
 
     /*var tmp = result not required*/ str.toLowerCase() 
 
       .replace(/[a-z]/ig, function(match /*that is [a-z]*/){ 
 
        freq[match] = (freq[match] || 0) + 1;//fill object 
 
        return match;//do not change str 
 
        }); 
 
     console.log(JSON.stringify(freq)); 
 
     return freq; 
 
    } 
 
<input type="text" onchange="getFreq(this.value);" />

関連する問題