2015-12-21 14 views
5

私は、各数字の '重み'に基づいて数字の文字列をソートする関数を作成する必要があります - '重み'は一緒に追加された数字の桁です(99の重みは18、 100の重みは1となるなど)。つまり、文字列"100 54 32 62""100 32 62 54"を返します。別の配列をソートする方法に基づいて1つの配列をソートする方法は? (JavaScript)

私が使ってうまくこれらの数字の重みの配列を取得することができますaddだけで、一般的な追加機能である

function orderWeight(str) { 
    var arr = str.split(" "); 
    var sortArr = []; 
    arr.forEach(t => sortArr.push(t.split("").map(s => parseInt(s, 10)).reduce(add, 0))); 
} 

。上記の例では、sortArr[1, 9, 5, 8]となります。

数字ウェイトsortArrの新しい配列がどのようにソートされるかに基づいて、元の数値の配列を文字列arrからソートする最良の方法は何ですか?

ありがとうございます!

答えて

4

これはトリックを行う必要があります。

var x = '100 54 32 62'; 

function orderWeight(str) { 
    return str.split(' ').sort(function(a, b) { 
    return (a.split('').reduce(function(p, c) { return +p + +c; })) > (b.split('').reduce(function(p, c) { return +p + +c; })); 
    }).join(' '); 
} 

var result = orderWeight(x); 

出力:

100 32 62 54 

UPDATE:

スターリングによって提案されたパー

が、ここではラムダ形式で記述された同じ機能です。

var x = '100 54 32 62'; 

function orderWeight(str) { 
    return str.split(' ').sort((a, b) => a.split('').reduce((p, c) => +p + +c) > b.split('').reduce((p, c) => +p + +c)).join(' '); 
} 

var result = orderWeight(x); 

注:これはラムダ構文を使用してJavascriptを初めて作成したときです。提案のためにスターリングに感謝します。

+0

魅力的に働いた! – joh04667

+0

OPを使用しているようなES6の構文を表示するには、これを編集する必要があります –

+0

@私はあなたが何を意味しているのか分かりませんので、答えを更新できるように詳しく教えてください... – Will

0

sorting with mapの溶液。

function sort(string) { 
 
    var array = string.split(' '), 
 
     mapped = array.map(function (a, i) { 
 
      return { index: i, value: +a.split('').reduce(function (a, b) { return +a + +b; }) }; 
 
     }); 
 
    return mapped.sort(function (a, b) { 
 
     return a.value - b.value; 
 
    }).map(function (a) { 
 
     return array[a.index]; 
 
    }).join(' '); 
 
} 
 

 
document.write('<pre>' + JSON.stringify(sort('100 54 32 62'), 0, 4) + '</pre>');

-1

Iは、与えられたインデックスの重みを比較する比較関数を渡すことによって、インデックスの配列(0..N-1)を有し、重みアレイ(に基づいてソートすることになります値)。 次に、各項目がどこにあるのかを示すインデックスの配列があります(例では、インデックス配列は[0、2、3、1]です。つまり、arr [0]が最初、arr [2 ]などです。次に、[arr [0]、arr [2]、arr [3]、arr [1]のように、インデックス配列を使用してソートされた配列を構築できます。 要約すると、 、重みアレイを計算し、インデックス配列0..n-1を作成し、重みアレイに基づいてソートし、最後にソートされたインデックス配列に基づいて出力配列を構築する。

関連する問題