JavaScript初学者编程题(25)
题目:给定一个字符串,请将字符串里的字符按照出现的频率降序进行重新排列并返回
第一种方法,利用对象和数组
JavaScript部分
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37var str = "weafrgfthhgjaaaawqfweeeeeeeeewefrheheh"; //obj是一个对象 var obj = {}; var arr = []; for(i = 0; i < str.length; i++){ //key是这一个字符串中某一个字符 var key = str[i]; //这里直接相当于把key作为obj的一个属性,如果存在这个属性,则直接属性值+1(这个属性值其实就是出现次数) if(obj[key]){ obj[key]++; } else{ //如果属性不存在,那么相当于添加这个属性,并且属性值为1 obj[key]=1; } } //遍历这个对象 for(var key in obj){ //item也是一个对象,里面有两个属性,第一个属性是字符,第二个属性是这个字符出现的次数 var item = {key:key,value:obj[key]} arr.push(item); } //利用数组的sort方法,对数组里面的元素(item对象)进行排序,根据规则是元素(item中的value,也就是出现次数) arr.sort(function (a, b) {6 return b.value - a.value; }) //新的字符串,用来将数组中的元素连起来输出 str = "" //根据字符,以及字符出现次数进行循环 for(j = 0; j < arr.length; j++){ for(i = 0; i < arr[j].value; i++){ str += arr[j].key; } } //最后输出 console.log(str);
第二种方法,利用二维数组
HTMl部分
复制代码
1
2
3<input type="text" id="str"> <button onclick="get()">get</button>
JavaScript部分
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65//这个是主要函数 function get() { //得到要处理的字符串 var theStr = document.getElementById('str').value; //二维数组,存着字符和出现次数 var wordAndNum = []; //遍历 for(var p = 0; p < theStr.length; p++){ //检测一下之前是否已经存过 var tempI=testInArray(theStr[p],wordAndNum); //这里使用三个等号是为了确定tempI是存在,并且下标为0,而不是不存咋 if(tempI === 0){ wordAndNum[0][1]++; }else if(tempI != 0){ //如果返回的不是false,而是大于等于0,证明之前存过了,直接出现次数+1 wordAndNum[tempI][1]++; }else{ //如果返回false,证明没找到,可以添加新的元素,temp为一个数组,存着这个字符以及“1”,这个1是第一次出现,所以次数为1 var temp = [theStr[p],1]; //将temp推进二维数组中 wordAndNum.push(temp); } } var sortArrayRes = sortArray(wordAndNum); console.log(arrayToString(sortArrayRes)); } //这个函数是是将数组拼接成字符串 function arrayToString(array) { var str = ''; for(var i = 0; i < array.length; i++){ for(var p = 0; p < array[i][1]; p++){ str += array[i][0]; } } return str; } //这个函数使用对数组进行排序的,依据是出现次数,这里采用的是选择排序(可改为其他排序方式) function sortArray(array) { for(var i = 0; i < array.length-1; i++){ for(var x = i + 1; x < array.length; x++){ if(array[i][1] < array[x][1]){ var temp = array[i]; array[i] = array[x]; array[x] = temp; } } } return array; } //这个函数是用来检测数组中是否已经存在这个字符 function testInArray(word,array) { //遍历一下 for(var i = 0; i < array.length; i++){ if(word == array[i][0]){ //如果找到了,那就证明之前记录过了,return这个元素的位置(下标) return i; } } //如果没找到,返回true return false; }
最后
以上就是清秀灰狼最近收集整理的关于JavaScript初学者编程题(25)JavaScript初学者编程题(25)的全部内容,更多相关JavaScript初学者编程题(25)JavaScript初学者编程题(25)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复