JavaScriptで配列を比較する3つの方法

JavaScriptでの配列の比較は一見簡単そうに思えますが、実は少し複雑です。この記事では、JavaScriptで配列を比較するための3つの異なる方法を詳しく解説します。

厳密な等価性の比較

最も直感的な比較方法です。この方法では、配列の長さが同じで、対応する位置にある各要素が等しい場合に、二つの配列が等しいと判断します。

function arraysAreEqual(arr1, arr2) {
    if (arr1.length !== arr2.length) {
        return false;
    }
    for (let i = 0; i < arr1.length; i++) {
        if (arr1[i] !== arr2[i]) {
            return false;
        }
    }
    return true;
}

const array1 = [1, 2, 3];
const array2 = [1, 2, 3];
const array3 = [1, 2, 4];

console.log(arraysAreEqual(array1, array2)); // true
console.log(arraysAreEqual(array1, array3)); // false

要素の内容だけを比較(順序は無視)

順序を無視して配列の内容だけを比較したい場合には、この方法が適しています。同じ要素を持つ配列であれば、順序に関係なく等しいと判断されます。

function arraysHaveSameElements(arr1, arr2) {
    if (arr1.length !== arr2.length) {
        return false;
    }
    const sortedArr1 = arr1.slice().sort();
    const sortedArr2 = arr2.slice().sort();
    
    for (let i = 0; i < sortedArr1.length; i++) {
        if (sortedArr1[i] !== sortedArr2[i]) {
            return false;
        }
    }
    return true;
}

const array1 = [1, 2, 3];
const array2 = [3, 2, 1];
const array3 = [1, 2, 4];

console.log(arraysHaveSameElements(array1, array2)); // true
console.log(arraysHaveSameElements(array1, array3)); // false

JSON文字列に変換して比較

シンプルで読みやすい方法です。配列をJSON文字列に変換してから比較します。この方法は要素の順序が一致している場合にのみ等しいと判断されます。

function arraysAreEqualJSON(arr1, arr2) {
    return JSON.stringify(arr1) === JSON.stringify(arr2);
}

const array1 = [1, 2, 3];
const array2 = [1, 2, 3];
const array3 = [1, 2, 4];

console.log(arraysAreEqualJSON(array1, array2)); // true
console.log(arraysAreEqualJSON(array1, array3)); // false

まとめ

JavaScriptでの配列の比較にはいくつかの方法があります。シチュエーションに応じて適切な比較方法を選ぶことが重要です。要素の順序も重要な場合は「厳密な等価性の比較」を、順序は無視して内容だけが重要な場合は「要素の内容だけを比較」を、シンプルな比較で良い場合は「JSON文字列に変換して比較」を選ぶと良いでしょう。

これらの方法を使えば、あらゆる状況で配列の比較が容易になります。