You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比较两个键结构一致的对象数组是否相等(不考虑元素顺序)

忽略元素顺序的对象数组相等判断方案

原代码问题说明

  • 未提前校验数组长度,长度不同的数组天然不可能相等
  • 内层循环逻辑错误,每次循环都会覆盖布尔结果,最终结果仅等于最后一次比较的返回值,还存在循环变量误用的问题,将detail2[j]写为detail2[i]
  • 未处理数组元素顺序不一致的场景,顺序调换后会判定为不相等

实现思路

  1. 前置校验:两个数组长度不一致直接返回false,避免后续无意义计算
  2. 对象序列化:将每个对象按照固定规则转为唯一字符串,因为题干明确键结构固定,我们可以将对象按键排序后拼接为标识字符串,避免键顺序或对象插入顺序对结果产生影响
  3. 数组排序后比较:将两个数组的所有序列化结果排序,再逐位比较是否完全一致即可,不受原始数组元素顺序影响

代码实现

function isArraysEqualIgnoreOrder(arr1, arr2) {
    // 长度不等直接返回false
    if (arr1.length !== arr2.length) return false

    // 对象转唯一标识字符串方法
    const serializeObj = (obj) => {
        // 按键排序后拼接字符串,兼容性更强
        return Object.keys(obj)
            .sort()
            .map(key => `${key}:${obj[key]}`)
            .join(',')
        // 若确认对象键顺序始终一致,也可以直接用JSON.stringify(obj),效率更高
    }

    // 两个数组转序列化数组后排序
    const sortedSerializedArr1 = arr1.map(serializeObj).sort()
    const sortedSerializedArr2 = arr2.map(serializeObj).sort()

    // 逐位比较
    for(let i = 0; i < sortedSerializedArr1.length; i++) {
        if (sortedSerializedArr1[i] !== sortedSerializedArr2[i]) return false
    }
    return true
}

测试用例

测试场景1:元素顺序调换,内容完全一致

let detail1 = [
    {'book':'LOTR','price':'14'},
    {'book':'Harry pottar','price':'12'},      
]
let detail2 = [
    {'book':'Harry pottar','price':'12'},
    {'book':'LOTR','price':'14'}
]
console.log(isArraysEqualIgnoreOrder(detail1, detail2)) // 输出true

测试场景2:数组长度不同

let detail3 = [
    {'book':'LOTR','price':'14'},
    {'book':'Harry pottar','price':'12'},      
]
let detail4 = [
    {'book':'Harry pottar','price':'15'},
    {'book':'LOTR','Price':'14'},
    {'book':'HPP','Price':'21'}
]
console.log(isArraysEqualIgnoreOrder(detail3, detail4)) // 输出false

测试场景3:长度相同但元素值不同

let detail5 = [
    {'book':'LOTR','price':'14'},
    {'book':'Harry pottar','price':'12'},      
]
let detail6 = [
    {'book':'Harry pottar','price':'15'},
    {'book':'LOTR','price':'14'}
]
console.log(isArraysEqualIgnoreOrder(detail5, detail6)) // 输出false

内容的提问来源于stack exchange,提问作者Sushant Rad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:54:02