2017-04-13 3 views
3

に戻って連結し、その後並べ替えるとする英数字:分割私はこのように見える英数字の束をソートするためにしようとしているJavaScriptの

[AD850X, MP342X, OP452X, ZC234X, ZC540X] 

ソートは数字だけをオフに基づいている必要がありますので、私が持っていますこのコードから全てのアルファ文字を取り除き、以前のように自分のコードの目的のためにそれらの文字を並べ替えた後にそれらの文字を戻したいと思います。例えば、上記の文字列が最初に次のようになります。

[850, 342, 452, 234, 540] 

その後、この、最終的にはその後、

[234, 342, 452, 540, 850] 

そして、これ、私が行う方法について考えてきた

[ZC234X, MP342X, OP452X, ZC540X, AD850X] 

をこれと私は、ソート後に数値コードに再結合するために同じ2文字を前に取得する方法はわかりません(この場合は「X」の最後の文字は常に同じで、後にこの値を連結します追加する最初の2つのアルファ文字を前と同じように入力します。

誰かがこれで私を助けてくれると大変感謝します。

ありがとうございます!

EDIT:もう1つの質問ですが、これが実行されると、アレイの低値と高値(要素数が異なる可能性があります)だけを出力します。私は.minと.maxを使ってみましたが、並べ替えた後にログを記録する配列をどうやって行うのかはわかりません。したがって、上記の場合、私はただ "ZC234X"と "AD850X"が必要になります。

答えて

1

2つの最初の文字を削除して並べ替えるのではなく、各要素内の一致する数字のみを比較するだけで配列を並べ替えることができます。

var arr = ['AD850X', 'MP342X', 'OP452X', 'ZC234X', 'ZC540X'], 
 
    res = arr.sort((a,b) => a.match(/\d+/)[0] - b.match(/\d+/)[0]), 
 
    min = res[0], 
 
    max = res[res.length-1]; 
 
    
 
    console.log("min value: " + min + " | max value: " + max);

+1

ありがとうございました! – musicmaster988

+0

編集:他にもう1つ質問がありますが、これが実行されると、配列の低値と高値(要素の数が異なる可能性があります)だけを出力します。私は.minと.maxを使ってみましたが、並べ替えた後にログを記録する配列をどうやって行うのかはわかりません。したがって、上記の場合、私はただ "ZC234X"と "AD850X"が必要になります。 – musicmaster988

+0

@ musicmaster988さて、やった。 –

2

あなたは要素とその数を格納するハッシュテーブルのようなオブジェクトを使用し、ソート値によることができるオブジェクトを形成します。

var data = ['AD850X', 'MP342X', 'OP452X', 'ZC234X', 'ZC540X']; 
 
var obj = {} 
 

 
data.forEach(e => obj[e] = e.match(/\d+/)[0]) 
 
var result = data.sort((a, b) => obj[a] - obj[b]); 
 
console.log(result)

+1

@Nina Scholzいいえ問題 ':)' –

1

あなたは、ソートのためだけにマッチしたnummerical値を使用することができます。 Array#sortはその場で働く。

正規表現が数値と一致しない場合、この提案ではデフォルト値が使用されます。

var array = ['AD850X', 'MP342X', 'OP452X', 'ZC234X', 'ZC540X']; 
 

 
array.sort((a, b) => (a.match(/\d+/) || 0) - (b.match(/\d+/) || 0)); 
 

 
console.log('min value', array[0]); 
 
console.log('max value', array[array.length - 1]); 
 
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題