0

2 つの配列を比較する最良の方法を見つけようとしています。

基本的に、さらに処理するために最大および最小の配列を知りたいです。これまでのところ、これを行うための私のコードは次のとおりです。

merge: function(arrOne, arrTwo) {

   if(arrOne == null || arrTwo == null) throw new Error();

    var bigArr = arrOne.length > arrTwo.length ? arrOne : arrTwo,
        smallArr = bigArr.length == arrOne.length ? arrTwo : arrOne;

    console.log(bigArr);
    console.log(smallArr);

}

これは機能しますが、これを行うにはもっと簡単で効率的な方法が必要だと思います。何かご意見は?

4

2 に答える 2

1

最良の方法は、三項を使用せず、通常の状態を記述することです。

var bigArr, smallArr;
if(arrOne.length > arrTwo.length){
    bigArr = arrOne;
    smallArr = arrTwo;
}else{
    smallArr = arrOne;
    bigArr = arrTwo;
}

読みやすく、高速で、明らかにバグがありません。

本当に三項演算子を使用したい場合(たとえば、重複した宣言宣言後の代入を避けるため)、おそらく正しい解決策は、条件を繰り返す (またはキャッシュする) ことです。

var   bigArr = arrOne.length > arrTwo.length ? arrOne.length : arrTwo.length,
    smallArr = arrOne.length > arrTwo.length ? arrTwo.length : arrOne.length;

ある程度読みやすく、明らかにバグがなく、宣言時に代入します。

if 重複を避けて条件を付けたい場合は、それでも可能です。ただし、このコードは判読不能であり (主にコンマ演算子が使用されているため)、運用コードでは使用しないでください。ただし、コード ゴルフにはまだ役立つ可能性があるので、変数に適切な名前を付けます。取扱注意:

l=(a.length>b.length)?(s=b,a):(s=a,b)
于 2013-03-29T19:03:05.323 に答える
0

配列間に未定義の値がある場合、コードは失敗します。このような状態に対処する必要がある場合は、まったく別のアプローチを試してください。

var myArray = new Array();
myArray[100] = true;
console.log(myArray.length); // returns 101
于 2013-03-29T18:49:27.800 に答える