如何判断两个数组是否完全相等?

var arrone = [
        {op: "A", name: "暂时将委托人的营业执照副本代为保管", is_answer: 0, sureid: true},
        {op: "B", name: "签订“专有经纪权合同", is_answer: 1, sureid: true},
        {op: "C", name: "到工商行政管理机构进行合同公证", is_answer: 1, sureid: true}
   ]
   var arrtwo = [
        {op: "B", name: "签订“专有经纪权合同", is_answer: 1, sureid: true},
        {op: "C", name: "到工商行政管理机构进行合同公证", is_answer: 1, sureid: true},
        {op: "D", name: "预收佣金", is_answer: 1}
   ]

请教一下,如何判断上面两个数组内容是否相等?

阅读 21k
8 个回答

这里封装了一个函数库 jutils

    /**
     * 判断两个数组是否相等
     *
     * @since 0.1.0
     * @category Array
     * @param {Array} 要比较的数组
     * @param {other} 另一个要比较的数组
     * @returns {boolean}
     * @example
     *
     * arrayEqual([0, 1],[1, 2])
     * // => false
     */

carbon.png


希望可以帮助到你,不过还是推荐 loadsh

// 先判断长度,再遍历比较
function arrayCompare(source, target) {
    return source.length == target.length && source.every((item, index) => item.op == target[index].op)
}
result = arrayCompare(arrone, arrtwo)
console.log(result)

stringify后如果字符串一样,那两个数组内容就是相等的

看你完全相等的定义是怎么样子的了,如果是要求完全一模一样,无论是顺序还是每一个值,你可以通过把两个数组都字符串化,然后比较两个字符串是否完全相等就行了。

如果有一些定制化要求的话,只能遍历两个数组,然后一个个比较了。

你可以把这两个数组转化为字符串,然后进行判断是否相等,使用JSON.stringify()或者toString()

loadsh 库 有这种方法 引入一下试试

转换成字符串比较

var arrone = [{
            op: "A",
            name: "暂时将委托人的营业执照副本代为保管",
            is_answer: 0,
            sureid: true
        }, {
            op: "B",
            name: "签订“专有经纪权合同",
            is_answer: 1,
            sureid: true
        }, {
            op: "C",
            name: "到工商行政管理机构进行合同公证",
            is_answer: 1,
            sureid: true
        }]
        var arrtwo = [{
            op: "B",
            name: "签订“专有经纪权合同",
            is_answer: 1,
            sureid: true
        }, {
            op: "C",
            name: "到工商行政管理机构进行合同公证",
            is_answer: 1,
            sureid: true
        }, {
            op: "D",
            name: "预收佣金",
            is_answer: 1
        }]

        function isTrue(arr, arr1) {
            if (arr.length !== arr1.length) {
                return false
            }
            for (let i = 0; i < arr.length; i++) {
                const item = arr[i];
                const item1 = arr1[i];
                if (item['op'] !== item1['op']) {
                    return false
                }
            }
            return true
        }

        console.log(isTrue(arrone, arrtwo))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题