2016-08-15 3 views
0

JSBin을 사용하여 입력 문자열을 허용하는 JS 코드 블록을 작성한 다음 문자열에 포함 된 각 문자를 반환 (중복 문자 및 기타 문자 제거) 한 다음 몇 번이나 셀 수를 계산합니다. 각 편지는 문자열에 활용되었습니다. 추가 연습을 위해 정규 표현식을 통합하려고합니다.각 문자의 빈도 계산 -

필자가 작성한 코드는 중복 된 내용을 제거하는 것이 아니며 각 문자의 빈도를 제대로 계산하지도 않습니다. 누군가 내가 잘못한 것을 말해 줄 수 있습니까?

다음
<!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>"); 
    } 
} 

이 도와 주셔서 너무 감사 여기

는 HTML입니다!

+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);" />

는 단일 문자 변수 이름을 사용하지 마십시오 제발, 제발. 'x','y','z'는 설명이 아니므로 한 달 후에 무슨 뜻인지 알 수는 없습니다. 또한, 왜 당신은 "중복"글자를 제거하고 있습니까? 그게 정확히 무슨 뜻 이죠? 너는 무엇을 제거하려고 하는가? –

+0

Understood - 연습으로 빠른 코드를 작성한 다음 삭제하는 중입니다. 내가 유지하고자하는 프로젝트에 대해 더 많은 설명 변수를 사용합니다. 혼란스러워서 죄송합니다. – CJamz

+0

중복을 제거하려면 본질적으로 "hello"를 가져 와서 "helo"로 변환하고 싶습니다. 그러면 초기 문자열에 문자 l의 두 인스턴스가 있었기 때문에 출력이 h 1, e 1, l 2, o 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

당신은 하나의 대체 기능에 그것을 할 수 있습니다. 이것은 하나의 예입니다.