私はSOで見つかった正規表現ソートのいくつかを試しましたが、ストリーム内の+シンボルが気に入らないと思います。ソートする必要があります。 だから私は、出力形式にする必要があります数値が同じときにアルファベットを保持するストリームの数値ソート
userString = "AAA+800|BBB+700|CCC+600|ZZZ+500|YYY+400|XXX+300|XXA+300|XXZ+300";
をこの(3〜30文字「+」0〜64000の数)のように見えるのデータ・ストリームを取得しています:
array[0] = "XXA+300" // 300 being the lowest num and XXA being before XXX
array[...]
array[7] = "AAA+800"
私は最低の番号から最高の番号まで注文して元に戻したい。 これは私の非効率的なコードです。 8x8回ループします。 (私のストリームはおそらく200アイテム長いでしょう)
それはうまくいくようです。誰かがそれを改善して反復回数を減らすのを助けることができますか?
var array = userString.split('|');
array.sort();
for(var i=0; i<len; i++) { // array2 contains just the numbers
bits = array[i].split('+');
array2[i] = bits[1];
}
array2.sort();
if(sort_order==2)
array2.reverse();
var c=0;
for(var a=0;a<len;a++) { // loop for creating array3 (the output)
for(var i=0; i<len ; i++) { // loop thru array to find matching score
bits = array[i].split('+');
if(bits[1] == array2[a]) { // found matching score
array3[c++] = bits[0]+'+'+bits[1]; // add to array3
array[i]='z+z'; // so cant rematch array position
}
}
}
array = array3;
種類よろしく
こんにちは、逆に、数字が逆になっていますが、アルファは順番にとどまります。実際に私はこのエラーが表示されます:オブジェクト800にはメソッド 'localeCompare'がありません – ChrisAdmin
どのブラウザですか?このエラーは、文字列ではないオブジェクトに対して 'localeCompare'を呼び出すことを示唆しています。他のエラーと同様にデバッグしてください。 'userArr'、' aLetters'、および 'bLetters'にそれぞれの反復で期待されるものが含まれていることを確認してください。彼らがそうでなければ、理由を理解してください。 番号を逆にしたい場合は、 'return aLetters.localeCompare ...'を 'return -aLetters.localeCompare ...'に変更するだけです。さらに読む:[(1)](https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/String/localeCompare)[(2)](https://developer.mozilla.org/ja/JavaScript)/Reference/Global_Objects/Array/sort)を参照してください。 –
@Jordan、電話で投稿を入力していますか?主人公か中毒者のどちらか:-) – Kos