Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript嵌套循环问题?_Javascript_Loops_Cryptography_Frequency - Fatal编程技术网

Javascript嵌套循环问题?

Javascript嵌套循环问题?,javascript,loops,cryptography,frequency,Javascript,Loops,Cryptography,Frequency,我试图创建一小块javascript来计算一段文本中每个字母的数量,供个人使用。我有一个以前的版本,每个字母都有一个单独的循环,它可以工作,但是相当长,而且创建起来很乏味。所以我试着做一个短一点的,但我不明白为什么它不起作用。谢谢 var text = prompt("Enter Text",""); // Remove Spaces var text = text.toUpperCase(); // Get the Text Length var textL = text.length;

我试图创建一小块javascript来计算一段文本中每个字母的数量,供个人使用。我有一个以前的版本,每个字母都有一个单独的循环,它可以工作,但是相当长,而且创建起来很乏味。所以我试着做一个短一点的,但我不明白为什么它不起作用。谢谢

var text = prompt("Enter Text","");
// Remove Spaces

var text = text.toUpperCase();
// Get the Text Length

var textL = text.length;
// Create the Hashtable

var hashtable = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
// Define the Latin Alphabet

var alphabet = "abcdefghijklmnopqrstuvwxyz";
// Nested loop to find frequencies and input them into the hashtable

for (d=0; d<=25; d++) {
    for (i=0; i<=textL; i++){
        if (text.charAt(i) === alphabet.charAt(d)){
            hashtable[d] = hashtable[d] + 1;
        }
    }
}
var text=prompt(“输入文本”和“”);
//删除空格
var text=text.toUpperCase();
//获取文本长度
var textL=text.length;
//创建哈希表
var hashtable=新数组(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
//定义拉丁字母表
var alphabet=“abcdefghijklmnopqrstuvxyz”;
//嵌套循环以查找频率并将其输入哈希表

对于(d=0;d如果您愿意支持ECMAScript 5,可以使用新的
map
reduce
来获得更小的代码位

给定一个字符串,您可以
拆分它,将其转换为一个数组。您需要事先删除任何空白
。替换(/\s/g',)
,然后
reduce
将迭代每个字母并返回一个结果。结果可以保存在一个对象中,每个属性名称都是字母

var str = "SampleText".toLowerCase().replace(/\s/g,'');
var counts = str.split('').reduce(function(acc, x) {
   acc[x] = (acc[x] || 0) + 1;
   return acc;
}, {});
输出:

{ a: 1,
  e: 2,
  l: 1,
  m: 1,
  p: 1,
  s: 1,
  t: 2,
  x: 1 }

您正在将字符串转换为大写,然后将其与小写字母表进行比较。请将
=新数组(0,0,
替换为
=[]
,然后将
哈希表[d]=0;
放入循环中。我一定会替换新数组(0,0…有这个,但我可以问一下为什么吗?我不知道我是如此愚蠢以至于要比较这两个。非常感谢!