1

初歩的なトピックであることは承知していますが、2 つの ES5 配列を比較するための次のアルゴリズムについて、どなたかコメントしていただけないでしょうか。

function equal_arrays(a, b) {
    "use strict";

    var c = 0;

    return a.every(function (e) {
        return e === b[c++];
    });
}

これは、2 つの配列をすばやく比較するための [].every() の非常にクリーンで明白な使用方法だと思います。「そんなに単純じゃないの?」それについての気持ち?

注: 2 つの配列は、すべての要素が同じ位置に厳密に等しい場合に等しいと見なされます。したがって、要素のインデックスと要素の値の両方が正確に等しくなければなりません。異なるタイプの値は等しくないと見なされます。スパース配列も比較されます。

テストケース:

      equal_arrays([],[]) ; // => true
      equal_arrays([1,2],[1,2]) ; // => true
      equal_arrays([1,,2],[1,,2]) ; // => true
      equal_arrays([,],[,]); // => true
      equal_arrays([1,,3,,,],[1,,3,,,]); // => true

ユースケースは => false をもたらします。自分自身を想像することができます。非配列の比較は構文エラーです。

有意義で有益な貢献者に感謝します。「最良の」(そのようなことは決してない)実装は次のようです。

function has(element, index)
{
    return this[index] === element;
}

function equal_arrays(a, b)
{
    return (a.length === b.length) && a.every(has, b) && b.every(has, a);
}

このようなテストケースが機能するために必要なspである双方向のevery()の@tomの実装:

equal_arrays([1,,3],[1,2,3]); //=> false 

もう一度感謝...

4

4 に答える 4