最近工作需要用到对象比较,自己写了一些,感觉满足不了需求,又在网上找了一些,整理了一下,作为自己学习的笔记。
Array.prototype.unique = function(){
this.sort();
var re=[this[0]];
for(var i = 1; i < this.length; i++){
if( this[i] !== re[re.length-1]){
re.push(this[i]);
}
}
return re;
}
var o2o = function(o1,o2){
//类型比
if(typeof o1 != typeof o2){
return false;
}
//长度比
if(typeof o1.length != typeof o2.length ){
return false;
}
//flag
var bool = true;
//中间变量
var keyArr1 = [];
var keyArr2 = [];
//把对象里面的都放到中间变量里面(数组化)
for(var i in o1){
keyArr1.push(i);
}
for(var i in o2){
keyArr2.push(i);
}
//再进行长度比
if(keyArr1.length != keyArr2.length){
return false;
}
//把一个中间变量里面所有的值添加到另外一个中间变量里
for(var i=0, k=keyArr2.length;i<k;i++){
keyArr1.push(keyArr2[i]);
}
//去重复,然后赋值给一个新的变量
//去重复,是把第一层给干掉,第二层可以用下面的方法来进行比对
var keyArr = keyArr1.unique();
for(var i=0,k=keyArr.length;i<k;i++){
if( ( keyArr[i] in o1 ) && ( keyArr[i] in o2 ) ){
if( typeof o1[keyArr[i]] == 'object' && typeof o2[keyArr[i]] == 'object' ){
bool = o2o( o1[keyArr[i]], o2[keyArr[i]] );
}else if( o1[keyArr[i]] !== o2[keyArr[i]] ){
return false;
}
}else{
return false;
}
}
return bool;
};
var tree = [
{
text: "Parent1",
nodes: [
{
text: "Child 1",
}
]
}
];
var tr = [
{
text: "Parent1",
nodes: [
{
text: "Child 1",
}
]
}
];
console.log(o2o(tree,tr)); // true