JS面试题之比较两个对象是否相等?

8次阅读

共计 579 个字符,预计需要花费 2 分钟才能阅读完成。

这是我在一次面试中,被面试官所提问的一道题
在这次面试题中
相等:指的是对象的属性个数值相等
有这样两个 obj
let obj1 = {
name:’ 李德华 ’,
age:18,
price:NaN
}

let obj2 = {
name:’ 张德华 ’,
age:18,
price:NaN
}
我能想到的一种方案
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
}
}
解答过程的思考

由于 obj 没有 length,我只能通过 Object.keys() 转化成数组
进入第二步,对象中的属性在另一个 obj 中是否存在。此处使用了 Object.hasOwnProperty() 仅对该对象中的属性进行对比 ( 避免 obj 继承了父级的属性)
承载第二步的基础对属性值进行比对。ES6 中 Object.is() 来避免出现 NaN 不等于自身的问题

或者使用 Underscore.js 中的_.isEqual
祝大家在金三银四的面试中取得满意的结果!

正文完
 0