javascript - JS中怎么判断两个数组是否包含的内容相同?
黄舟
黄舟 2017-04-11 12:40:18
[JavaScript讨论组]

JS中判断数组是否包含相同内容,每个子元素内容相同,顺序不同也算相同,而且数组里的内容不只有基本类型,还可能有对象,看了网上很多方法,测试了一下,基本都不太对。。。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(5)
怪我咯

可以使用es7数组新增的includes方法。遍历数组a, 然后看数组b是否includes
数组实例的includes

ringa_lee
function isEquals(a, b) {
    return JSON.stringify(a.sort()) === JSON.stringify(b.sort());
}

改进算法

缺陷:比较数组的时候必须按顺序相等,因为数级里的 object 没法排序

const compare = (() => {
    function compareArray(a, b) {
        console.log("array", a, b);
        if (a.length !== b.length) {
            return false;
        }
        const length = a.length;
        for (let i = 0; i < length; i++) {
            if (!compare(a[i], b[i])) {
                return false;
            }
        }

        return true;
    }

    function compareObject(a, b) {
        console.log("object", a, b);
        const keya = Object.keys(a);
        const keyb = Object.keys(b);

        if (keya.length !== keyb.length) {
            return false;
        }

        return keya.every(key => {
            if (!compare(a[key], b[key])) {
                return false;
            }
            return true;
        });
    }

    function compare(a, b) {
        if (a === b) {
            return true;
        }

        if (typeof a !== typeof b || a === null || b === null) {
            return false;
        }

        if (Array.isArray(a)) {
            if (!Array.isArray(b)) {
                return false;
            }
            return compareArray(a, b);
        }

        if (typeof a === "object") {
            return compareObject(a, b);
        }

        console.log("value", a, b);
        return false;
    }

    return compare;
})();


var aa = [{ Name: "YuanXP", Id: 9 }, { Name: "YuanX", Id: 9 }];
var bb = [{ Name: "YuanXP", Id: 9 }, { Id: 9, Name: "YuanX" }];
var cc = [{ Name: "YuanXP", Id: 19 }, { Id: 9, Name: "YuanX" }];

console.log(compare(aa, bb));
console.log(compare(aa, cc));
PHPz
http://underscorejs.org/#difference

difference_.difference(array, *others)
Similar to without, but returns the values from array that are not present in the other arrays.

_.difference([1, 2, 3, 4, 5], [5, 2, 10]);
=> [1, 3, 4]

if ( _.difference(arr1, arr2).length == 0 && _.difference(arr2, arr1).length == 0 ) {
  //两个数组相同, 数组元素有obj之类的不知行不行
}
阿神

连接两个数组,用hash判断重复

天蓬老师

https://github.com/hanzichi/u... 不知道有没有帮助

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号