2016-11-20 131 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>"); 
    }