判断两个对象集合是否相等?

发布于 2022-09-04 10:24:48 字数 51 浏览 24 评论 0

有两个独立的对象集合,如何判断这两个集合里面的对象个数、属性、值是否相等?越简单越好的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

妖妓 2022-09-11 10:24:48
obj=[{id:1,name:'a'},{id:2,name:'b'}]
obj2=[{id:1,name:'a'},{id:2,name:'b'}]
obj3=[{id:1,name:'a'},{id:3,name:'c'}]
obj==obj2;//false
JSON.stringify(obj)==JSON.stringify(obj2);//true
JSON.stringify(obj)==JSON.stringify(obj3);//false
[旋木] 2022-09-11 10:24:48

这个答案保证能让你满足

function compare(obj1,obj2){
    if(Object.keys(obj1).length != Object.keys(obj2).length){
      return false
    }else{
      for(key in obj1){
        if(obj2.hasOwnProperty(key)){
            if( !Object.is(obj1[key],obj2[key])){
                return false;
            }
        }else{
          return false
        }
      }
      return true
    }
}
谁对谁错谁最难过 2022-09-11 10:24:48

js这样的动态类型语言,相等这个词的涵义实际上非常丰富。
你问如何判断对象相等,那么首先需要做的就是定义一下你这个相等需要达到什么程度。

  1. 引用地址相等

  2. 原型链是否需要一致?

  3. 构造函数是否需要一致?

  4. 如果要检查内容,自身属性之下的对象是判断其引用相等还是递归调用当前相等函数进行判断?

  5. 循环引用怎么办?

…………等等
它们各自的处理方式都有些微妙的区别。

昔梦 2022-09-11 10:24:48

使用underscoreisEqual就好啦:

a = [ { name: 'wang' }, { name: 'liu' } ]
b = [ { name: 'wang' }, { name: 'liu' } ]
_.isEqual(a, b) // true
软糖 2022-09-11 10:24:48
var a = new Set([1,2,3]);
var b = new Set([1,3,2]);

console.log(eqSet(a, b)); // true

function eqSet(as, bs) {
    if (as.size !== bs.size) return false;
    for (var a of as) if (!bs.has(a)) return false;
    return true;
}

参见:https://stackoverflow.com/que...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文