有两个独立的对象集合,如何判断这两个集合里面的对象个数、属性、值是否相等?越简单越好的。
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
这个答案保证能让你满足
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 } }
js这样的动态类型语言,相等这个词的涵义实际上非常丰富。你问如何判断对象相等,那么首先需要做的就是定义一下你这个相等需要达到什么程度。
相等
引用地址相等
原型链是否需要一致?
构造函数是否需要一致?
如果要检查内容,自身属性之下的对象是判断其引用相等还是递归调用当前相等函数进行判断?
循环引用怎么办?
…………等等它们各自的处理方式都有些微妙的区别。
使用underscore的isEqual就好啦:
a = [ { name: 'wang' }, { name: 'liu' } ] b = [ { name: 'wang' }, { name: 'liu' } ] _.isEqual(a, b) // true
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...
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(5)
这个答案保证能让你满足
js这样的动态类型语言,
相等
这个词的涵义实际上非常丰富。你问如何判断对象
相等
,那么首先需要做的就是定义一下你这个相等
需要达到什么程度。引用地址相等
原型链是否需要一致?
构造函数是否需要一致?
如果要检查内容,自身属性之下的对象是判断其引用相等还是递归调用当前
相等
函数进行判断?循环引用怎么办?
…………等等
它们各自的处理方式都有些微妙的区别。
使用underscore的isEqual就好啦:
参见:https://stackoverflow.com/que...