私は整数の配列をソートして、それらを最大の整数を形成する順番に並べようとしています。たとえば、99,901> 90,199であるため[99、901]は[99、901]とソートする必要があります。 99,191> 91,991であるため、[91、991]は[991,91]のようにソートする必要があります。Javascript Array.prototype.sort()意図せずに配列を変異させる
これを行うには、Array.prototype.sort()を使用して、以下のコードブロックのcompare関数を引数として渡します。この比較関数の引数は、配列の配列です(各整数は最初に1桁の整数の配列に分割されます)。[[9,1]、[9,9,1]]。
私の問題は、この比較関数は機能しますが、いくつかの要素が切り捨てられた配列を返します。明らかに、これは、2つの整数の2番目(または3番目、4番目など)の要素を比較する必要があるときに、Array.prototype.shift()を呼び出しているためです。私はこれを期待していませんでしたが、回避策を見つけることはできません。例えば
、私は
[[9,9],[9,1,9]]
で必要なものに対し、出力
[[9],[1,9]]
次のコードは、あなたは私が探しています出力を得るために、私の比較関数を修正することができる方法を教えてもらえますか?
ありがとうございます!最も簡単な
var compare = function(a, b){
if(a.length === 1 || b.length === 1){
return (b[0] - a[0]);
}
else if(a[0] !== b[0]){
return compare(a[0], b[0]);
}
else if(a[0] === b[0]){
if(a.length !== 1){
a.shift();
}
if(b.length !== 1){
b.shift();
}
return compare(a, b);
}
};
var example = function(){
var digits = [[9,9],[9,1,9]];
digits.sort(compare);
console.log(digits);
};
example();
'シフト()'配列を変異させます。それをしないでください。 – SLaks
ヒント:これらの配列を文字列に変換して比較するだけです。 – Bergi