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)相关推荐

  1. JavaScript初学者编程题(24)

    JavaScript初学者编程题(24) 题目:给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量.返回最富有客户 ...

  2. JavaScript初学者编程题(23)

    JavaScript初学者编程题(23) 题目:给你一个字符串 S,请你删去其中的所有元音字母( 'a','e','i','o','u'),并返回这个新字符串 HTMl部分 <input typ ...

  3. JavaScript初学者编程题(22)

    JavaScript初学者编程题(22) 题目:利用递归方法求5! JavaScript部分 function getNum(num) {if(num < 2){return 1;}else{r ...

  4. JavaScript初学者编程题(21)

    JavaScript初学者编程题(21) 题目:求1+2!+3!+-+20!的和 JavaScript部分 function get(num) {//sum总和var sum = 0;for(var ...

  5. JavaScript初学者编程题(20)

    JavaScript初学者编程题(20) 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13-求出这个数列的前20项之和. JavaScript部分 function get(n ...

  6. JavaScript初学者编程题(19)

    JavaScript初学者编程题(19) 题目:打印出如下图案(菱形).打印出来菱形 JavaScript部分 function get(num) {var str = '';for(var i = ...

  7. JavaScript初学者编程题(18)

    JavaScript初学者编程题(18) 题目:两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x, ...

  8. JavaScript初学者编程题(17)

    JavaScript初学者编程题(17) 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下 ...

  9. JavaScript初学者编程题(16)

    JavaScript初学者编程题(16) 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? HTMl部分 <!--t ...

最新文章

  1. idea配置远程服务器实现远程编辑文件及ssh连接
  2. api 请求 fail_谈一谈定位api的使用
  3. 找call写call_如何将Google Call Widget添加到任何网页
  4. baseresponse响应类_内部类、响应类Response、序列化基类、反序列化、全局局部钩子...
  5. 数据结构-队列1-顺序存储
  6. python spark安装_windows下安装spark-python
  7. Linux多线程详解
  8. 2019 第二周 开发笔记
  9. 区块链 fisco bcos webase-front docker方式部署
  10. 优先级继承 linux,非独占锁的优先级继承协议及其在Linux下的实现
  11. 整数规划_教学 | 线性(整数)规划的若干建模技巧
  12. lisp一键室内标注_CAD插件:自动标注面积lisp程序
  13. 训练集和测试集的区别
  14. 设置二级域名解析到同IP不同端口
  15. 研发质量管理6大根基
  16. MAC安装chromedriver碰到的问题
  17. 【商业信息】PNP ID注册名单 2019-05-21
  18. 【转】在WPF显示动态GIF图片
  19. C语言:判断100-999中哪些数为水仙花数以及拓展应用
  20. double scanf输入时用%lf而printf用%f或%lf原理

热门文章

  1. Vue组件中的data和props属性
  2. Pytorch中的数据加载
  3. 一文看懂95%置信区间
  4. 无人驾驶 | 为什么双目自动驾驶系统难以普及?
  5. 轻松学Pytorch-使用卷积神经网络实现图像分类
  6. 好骚气的树状数组的解释
  7. 大数据分析中使用关系型数据库的关键点
  8. Kubernetes之路 2 - 利用LXCFS提升容器资源可见性
  9. 云计算集成过程中七个关键性的问题
  10. nodeJs-autoMerge