JavaScript如何检查数组中嵌套的子数组是否全部相同?
解决数组类型usecase的一致性判断问题
原代码失效的核心原因是:数组是引用类型,直接用===比较两个数组时,只会检查它们是否指向内存中的同一个对象,而不是比较数组内容是否一致。哪怕两个数组元素完全相同,只要是不同的数组实例,===都会返回false。
修改后的完整代码
var arrSession = [ { type: '1', usecase: [ '1' ] }, { type: '1', usecase: [ '1' ] } ]; // 辅助函数:比较两个数组内容是否一致 function arraysEqual(a, b) { // 先判断长度是否相同,长度不同直接返回false if (a.length !== b.length) return false; // 逐个比较数组元素 return a.every((val, index) => val === b[index]); } function isSame(obj, index, arr) { if (index === 0) { return true; } else { const prevObj = arr[index - 1]; return ( obj.type === prevObj.type && arraysEqual(obj.usecase, prevObj.usecase) ); } } var checkUsecase = arrSession.every(isSame); console.log('checkUsecase:'); console.log(checkUsecase); // 输出true
补充说明
如果usecase数组中包含对象、嵌套数组等复杂类型,需要把arraysEqual改成递归比较的版本。但如果只是字符串、数字这类基本类型,上面的写法就足够满足需求。
内容的提问来源于stack exchange,提问作者Philipp M
相关产品推荐
相关产品推荐

