扫码关注官方订阅号
JS中判断数组是否包含相同内容,每个子元素内容相同,顺序不同也算相同,而且数组里的内容不只有基本类型,还可能有对象,看了网上很多方法,测试了一下,基本都不太对。。。
人生最曼妙的风景,竟是内心的淡定与从容!
可以使用es7数组新增的includes方法。遍历数组a, 然后看数组b是否includes。数组实例的includes
es7
includes
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));
连接两个数组,用hash判断重复
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
可以使用
es7数组新增的includes方法。遍历数组a, 然后看数组b是否includes。数组实例的includes
改进算法
缺陷:比较数组的时候必须按顺序相等,因为数级里的 object 没法排序
连接两个数组,用hash判断重复