JavaScript初学者编程题(25)
JavaScript初学者编程题(25)
题目:给定一个字符串,请将字符串里的字符按照出现的频率降序进行重新排列并返回
第一种方法,利用对象和数组
JavaScript部分
var 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{//如果属性不存在,那么相当于添加这个属性,并且属性值为1obj[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) {6return 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部分
<input type="text" id="str"><button onclick="get()">get</button>
JavaScript部分
//这个是主要函数
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,证明之前存过了,直接出现次数+1wordAndNum[tempI][1]++;}else{//如果返回false,证明没找到,可以添加新的元素,temp为一个数组,存着这个字符以及“1”,这个1是第一次出现,所以次数为1var 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;}}//如果没找到,返回truereturn false;
}
JavaScript初学者编程题(25)相关推荐
- JavaScript初学者编程题(24)
JavaScript初学者编程题(24) 题目:给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量.返回最富有客户 ...
- JavaScript初学者编程题(23)
JavaScript初学者编程题(23) 题目:给你一个字符串 S,请你删去其中的所有元音字母( 'a','e','i','o','u'),并返回这个新字符串 HTMl部分 <input typ ...
- JavaScript初学者编程题(22)
JavaScript初学者编程题(22) 题目:利用递归方法求5! JavaScript部分 function getNum(num) {if(num < 2){return 1;}else{r ...
- JavaScript初学者编程题(21)
JavaScript初学者编程题(21) 题目:求1+2!+3!+-+20!的和 JavaScript部分 function get(num) {//sum总和var sum = 0;for(var ...
- JavaScript初学者编程题(20)
JavaScript初学者编程题(20) 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13-求出这个数列的前20项之和. JavaScript部分 function get(n ...
- JavaScript初学者编程题(19)
JavaScript初学者编程题(19) 题目:打印出如下图案(菱形).打印出来菱形 JavaScript部分 function get(num) {var str = '';for(var i = ...
- JavaScript初学者编程题(18)
JavaScript初学者编程题(18) 题目:两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x, ...
- JavaScript初学者编程题(17)
JavaScript初学者编程题(17) 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下 ...
- JavaScript初学者编程题(16)
JavaScript初学者编程题(16) 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? HTMl部分 <!--t ...
最新文章
- idea配置远程服务器实现远程编辑文件及ssh连接
- api 请求 fail_谈一谈定位api的使用
- 找call写call_如何将Google Call Widget添加到任何网页
- baseresponse响应类_内部类、响应类Response、序列化基类、反序列化、全局局部钩子...
- 数据结构-队列1-顺序存储
- python spark安装_windows下安装spark-python
- Linux多线程详解
- 2019 第二周 开发笔记
- 区块链 fisco bcos webase-front docker方式部署
- 优先级继承 linux,非独占锁的优先级继承协议及其在Linux下的实现
- 整数规划_教学 | 线性(整数)规划的若干建模技巧
- lisp一键室内标注_CAD插件:自动标注面积lisp程序
- 训练集和测试集的区别
- 设置二级域名解析到同IP不同端口
- 研发质量管理6大根基
- MAC安装chromedriver碰到的问题
- 【商业信息】PNP ID注册名单 2019-05-21
- 【转】在WPF显示动态GIF图片
- C语言:判断100-999中哪些数为水仙花数以及拓展应用
- double scanf输入时用%lf而printf用%f或%lf原理