Home > Article > Web Front-end > JavaScript Fun Question: Weight Loss Club
My friend Xiao Wang and I are both members of the "Weight Loss Fitness Club".
Xiao Wang always looks worried recently, because a weight list of all members is released on these days every month, and he is always the fattest without exception.
I was also part of the list, so I told him: "Don't worry, my friend, I will help you change the order of the list."
I thought about it and thought it would be better to arrange it in this order: each weight number is arranged according to the sum of each digit, from small to large.
For example, 99kg, the sum of its digits is 18, which means the "weight" is 18.
For another example, 100kg has a weight of 1, so it ranks before 99kg.
The task is this:
Given a string of weight loss club member lists, can you sort it by weight and return it?
Example:
"56 65 74 100 99 68 86 180 90" => "100 180 90 56 65 74 68 86 99"
When two numbers have the same weight, such as 180 and 90, then 180 comes first, and we follow dictionary order.
All numbers are positive, the list may be empty.
To be honest, when I saw this topic, I was a little sweaty~ After all, I am also a fat man.
It’s obviously not convenient to directly operate strings, so let’s break them into arrays!
Then sort the array, the rules are as follows:
1. Weight is given priority, the smaller the weight, the higher the ranking.
2. When the weights are the same, arrange them in dictionary order.
To calculate the weight, that is, to calculate the sum of each digit, you need this method:
function eachDigitSum(num){ var sum = 0; num = num - 0; while(num > 0){ sum += num % 10; num = parseInt(num / 10); } return sum; }
Then, to compare the lexicographic order, you need this method:
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++; } }
In fact, this method There is an alternative method in native JS:
String.prototype.localeCompare
This defaults to dictionary order.
Finally, just integrate, sort, and aggregate into strings.
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(" "); }
The above is the content of JavaScript Fun Questions: Weight Loss Club. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!