js比较两个数组是否相同

该代码实现了一个名为`compareArrSame`的函数,用于比较两个一维数组是否完全相等。当`type`为`same`时,检查元素是否相同,顺序不重要;若为`perfectSame`,则要求元素相同且顺序一致。函数首先判断数组是否存在及长度是否相等,然后根据`type`进行相应比较,返回比较结果。

数组内元素非对象类型元素

   /**
     * @funciton 比较两个数组是否完全相等
     * @description 适用于一维数组, 并且数组内元素是非对象元素
     * @param one 第一个数组
     * @param two 第二个数组
     * @param type <same>:元素相同,顺序可不同 <perfectSame>:元素相同,顺序也相同
     * @return isArrEqual
     * @author six+seven 21/9/7
     */
    function compareArrSame(one, two, type) {
        if (!one || !two) {
            return false
        }
        if (one.length !== tow.length) {
            return false
        }
        let isArrEqual;
        switch (type) {
            case 'same':
                isArrEqual = one.every(ele => two.includes(ele))
                break;
            case 'perfectSame':
                let resultArr = one.map((item, index) => item === tow[index])
                isArrEqual = resultArr.every(ele => ele === true)
                break
            default:
                isArrEqual = one.every(ele => two.includes(ele))
                break
        }
        return isArrEqual
    }

JavaScript 中,不能直接使用 `==` 或者 `===` 来判断两个数组是否相等,以下是几种比较两个数组是否完全相同的方法: ### 方法一:自定义函数遍历比较 通过自定义函数,先检查数组引用是否相同,再检查数组长度,最后逐个元素比较,示例代码如下: ```javascript function compareArray(a1, a2) { if (a1 === a2) return true; if ((!a1 && a2) || (a1 &&!a2)) return false; if (a1.length!== a2.length) return false; for (var i = 0, n = a1.length; i < n; i++) { if (a1[i]!== a2[i]) return false; } return true; } let list = [1, 2, 4]; let newList = [1, 2, 4]; if (compareArray(list, newList)) { console.log("数据相同------------- "); } else { console.log("数组不同------------- "); } ``` 此方法适用于简单数组元素的比较,对于数组顺序要求严格,即元素顺序不同会判定为不相同[^4]。 ### 方法二:排序后比较字符串化结果 这种方法先对数组进行排序,再将数组转换为 JSON 字符串进行比较,示例代码如下: ```javascript var arr1 = ["11", "22", "11"]; var arr2 = ["11", "11", "22"]; if (JSON.stringify(arr1.sort()) == JSON.stringify(arr2.sort())) console.log("相等"); ``` 该方法适用于数组元素为简单数据类型且不考虑元素顺序的情况,但对于数组中包含对象等复杂数据类型可能不适用,因为对象的字符串化结果与对象内容本身的比较逻辑可能不一致[^5]。 ### 方法三:考虑复杂数组元素的深度比较 对于包含复杂元素(如对象)的数组,可使用递归方法进行深度比较,示例代码如下: ```javascript function isEqual(value1, value2) { if (value1 === value2) return true; if (typeof value1!== 'object' || value1 === null || typeof value2!== 'object' || value2 === null) { return false; } const keys1 = Object.keys(value1); const keys2 = Object.keys(value2); if (keys1.length!== keys2.length) return false; for (const key of keys1) { if (!keys2.includes(key) ||!isEqual(value1[key], value2[key])) { return false; } } return true; } function compareArrays(arr1, arr2) { if (arr1.length!== arr2.length) return false; for (let i = 0; i < arr1.length; i++) { if (!isEqual(arr1[i], arr2[i])) return false; } return true; } let arrA = [{ a: 1 }, { b: 2 }]; let arrB = [{ a: 1 }, { b: 2 }]; if (compareArrays(arrA, arrB)) { console.log("数组相同"); } else { console.log("数组不同"); } ``` 此方法能处理包含对象等复杂元素的数组比较,但性能相对较低,因为涉及递归调用[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值