ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の楽しい質問: 減量クラブ

JavaScript の楽しい質問: 減量クラブ

黄舟
黄舟オリジナル
2017-02-04 15:24:241151ブラウズ

私の友人のシャオ・ワンと私は二人とも「減量フィットネスクラブ」のメンバーです。

シャオ・ワンは、毎月この日にメンバー全員の体重リストが発表されるのですが、例外なくいつも一番太っているので、最近いつも心配そうな顔をしています。

私もそのリストの一部だったので、彼にこう言いました。「心配しないで、友よ、リストの順序を変えるのを手伝ってあげるよ。」

考えて、この順序で並べた方が良いのではないかと思いました。各体重の数字は、各桁の合計に従って小さいものから大きいものへと配置されます。

たとえば、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 のように、2 つの数値が同じ重みを持つ場合、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 Fun question: Weight Loss Club の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。