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

淩亂°似流年 2022-03-07 11:42 296阅读 0赞

这是我在一次面试中,被面试官所提问的一道题

在这次面试题中

相等:指的是对象的属性个数值相等

有这样两个obj

  1. let obj1 = {
  2. name:'李德华',
  3. age:18,
  4. price:NaN
  5. }
  6. let obj2 = {
  7. name:'张德华',
  8. age:18,
  9. price:NaN
  10. }

我能想到的一种方案

  1. function compare(obj1,obj2){
  2. if(Object.keys(obj1).length != Object.keys(obj2).length){
  3. return false
  4. }else{
  5. for(key in obj1){
  6. if(obj2.hasOwnProperty(key)){
  7. if( !Object.is(obj1[key],obj2[key])){
  8. return false;
  9. }
  10. }else{
  11. return false
  12. }
  13. }
  14. return true
  15. }
  16. }

解答过程的思考

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

或者使用 Underscore.js中的_.isEqual

祝大家在金三银四的面试中取得满意的结果!

发表评论

表情:
评论列表 (有 0 条评论,296人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js比较对象是否相等

    > 前言:如何判断两个对象是否相等? 两个Object类型对象,即使拥有相同属性、相同值,当使用 == 或 === 进行比较时,也不认为他们相等。这就是因为他们是通过引用(内