两个对象 对比 返回属性值不相同的属性
var obj = {
name:'ss',
age:12,
arr:[1,2]
}
var obj1={
name:'aa',
age:'12',
arr:[0,1]
}
obj 和 obj1对比 name属性值不相同
age 的值为 12 和 ’12‘ 用 == 判断 也是相同的 不用处理
数组 的话 [1,2] 相同 ['1','2'] | [1,2]和[0,1]不相同 所以返回 [name,arr]这两个属性
大佬 来啊
两个对象 对比 返回属性值不相同的属性
var obj = {
name:'ss',
age:12,
arr:[1,2]
}
var obj1={
name:'aa',
age:'12',
arr:[0,1]
}
obj 和 obj1对比 name属性值不相同
age 的值为 12 和 ’12‘ 用 == 判断 也是相同的 不用处理
数组 的话 [1,2] 相同 ['1','2'] | [1,2]和[0,1]不相同 所以返回 [name,arr]这两个属性
大佬 来啊
这个问题首先需要确定是否对象中只有这3个属性,还是可能有更多的属性?
其次是属性的值范围是否如例子所示,比如name最终是string,age是可以数字化的,arr是数组,且其中的元素是可以数字化的?
如果能确认,则相应处理比较简单,否则就很麻烦。当然,即使这样,在比较arr属性时还需要细化规则,比如 [1,2] 相同 ['1','2'],是否 [1,2] 相同 ['2','1'],即子元素位置关系是否影响结果?
根据下面的讨论,其实关键是2个
因为值主要涉及 3种情况,数组、数字和字符串,所以如果有一个比较函数能直接比较三者则可以很快得出。
var CompObj=function(Obj1,Obj2){
let rtArr=[];
for(var i in Obj1) {
let tmp1=Obj1[i];
let tmp2=Obj2[i];
//下面的代码把所有情况转换为string
if(tmp1 instanceof Array){
tmp1=tmp1.sort();
tmp2=tmp2.sort();
tmp1=tmp1.join(',');
tmp2=tmp2.join(',');
}else{
tmp1=' '+tmp1;
tmp2=' '+tmp2;
}
if(tmp1!==tmp2){
rtArr.push(i);
}
}
return rtArr
}
6 回答2.9k 阅读✓ 已解决
8 回答4.6k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
6 回答2.3k 阅读
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决