最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScript趣题:减肥俱乐部

来源:动视网 责编:小采 时间:2020-11-27 20:25:44
文档

JavaScript趣题:减肥俱乐部

JavaScript趣题:减肥俱乐部:我和朋友小王都是减肥健身俱乐部的成员。小王最近总是忧心忡忡的样子,因为每月这几天都会发布一个所有成员的体重名单,而他每次都无一例外是最胖的。我也是拟定名单的一份子,于是我告诉他:别担心,我的朋友,我来帮你改下列表的顺序。我前思后想,
推荐度:
导读JavaScript趣题:减肥俱乐部:我和朋友小王都是减肥健身俱乐部的成员。小王最近总是忧心忡忡的样子,因为每月这几天都会发布一个所有成员的体重名单,而他每次都无一例外是最胖的。我也是拟定名单的一份子,于是我告诉他:别担心,我的朋友,我来帮你改下列表的顺序。我前思后想,


我和朋友小王都是“减肥健身俱乐部”的成员。

小王最近总是忧心忡忡的样子,因为每月这几天都会发布一个所有成员的体重名单,而他每次都无一例外是最胖的。

我也是拟定名单的一份子,于是我告诉他:“别担心,我的朋友,我来帮你改下列表的顺序”。

我前思后想,觉得还是按这样的顺序来排为好:每个体重数字,按各个数位数字之和,从小到大排列。

比如说,99kg,它的各个数位数字之和是18,也就是说“权重”为18。

再比如,100kg,它的权重是1,所以排在99kg之前。

任务是这样:

给定减肥俱乐部成员名单字符串,你能按权重给它排序并返回嘛?

例子:

"56 65 74 100 99 68 86 180 90" => "100 180 90 56 65 74 68 86 99"

当两个数字拥有同样的权重,如180和90,则180在前,此时我们按照字典序来。

所有数字都为正,列表可能为空。

说实话,看到这个题目,我也是有些汗~毕竟自己也是个胖子。

直接操作字符串显然不够方便,还是打散成数组吧!

接着对数组进行排序,规则如下:

1.权重优先,权重越小,排名越前。

2.当权重相同,再按照字典序排列。

计算权重,也就是计算各个数位数字之和,得需要这个方法:

function eachDigitSum(num){ 
 var sum = 0; 
 num = num - 0; 
 while(num > 0){ 
 sum += num % 10; 
 num = parseInt(num / 10); 
 } 
 return sum; 
}

接着,比较字典序,需要这个方法:

function compareASCII(a,b){ 
 var i=0; 
 while(true){ 
 var c1 = a.charCodeAt(i); 
 var c2 = b.charCodeAt(i); 
 if(!c1){ 
 return -1; 
 } 
 if(!c2){ 
 return 1; 
 } 
 if(c1 < c2){ 
 return -1; 
 } 
 if(c1 > c2){ 
 return 1; 
 } 
 i++; 
 } 
}

其实这个方法在原生JS是有替代方法的:

String.prototype.localeCompare

这个默认就是按字典序。


最后,整合下排序,再聚合成字符串就可以了。

function orderWeight(str) { 
 return str.split(" ").sort(function(a,b){ 
 var n1 = eachDigitSum(a); 
 var n2 = eachDigitSum(b); 
 if(n1 > n2){ 
 return 1; 
 } 
 else if(n1 < n2){ 
 return -1; 
 } 
 else{ 
 return compareASCII(a,b); 
 } 
 }).join(" "); 
}

文档

JavaScript趣题:减肥俱乐部

JavaScript趣题:减肥俱乐部:我和朋友小王都是减肥健身俱乐部的成员。小王最近总是忧心忡忡的样子,因为每月这几天都会发布一个所有成员的体重名单,而他每次都无一例外是最胖的。我也是拟定名单的一份子,于是我告诉他:别担心,我的朋友,我来帮你改下列表的顺序。我前思后想,
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top