js比较两个数组内容是否相等的方案

发布时间 2024-01-04 15:05:27作者: 上官靖宇

1. 深度相等比较

如果你想要比较两个数组的内容是否相同,包括数组中的嵌套数组或对象等元素,你可以使用深度相等比较方法,比如递归或使用第三方库:

递归方式:

function arraysAreEqual(arr1, arr2) {
    if (arr1.length !== arr2.length) {
        return false;
    }

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

    return true;
}

测试数据:

const array1 = [1, 'apple', [3, 4]];
const array2 = [1, 'apple', [3, '4']];

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

使用第三方库

使用第三方库,如lodash中的isEqual方法:

const _ = require('lodash');

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

console.log(_.isEqual(array1, array2)); // true

2. 简单相等比较

如果你只关心两个数组是否具有相同的元素,而不关心元素的顺序,你可以对数组进行排序,然后逐个比较元素:

function arraysAreEqual(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, 4];
const array2 = [4, 3, 2, 1];

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