资讯专栏INFORMATION COLUMN

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

wangbjun / 2543人阅读

摘要:这是我在一次面试中,被面试官所提问的一道题在这次面试题中相等指的是对象的属性个数值相等有这样两个李德华张德华我能想到的一种方案解答过程的思考由于没有,我只能通过转化成数组进入第二步,对象中的属性在另一个中是否存在。

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

在这次面试题中

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

有这样两个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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/102054.html

相关文章

  • 【金三银四】面试题之java基础

    摘要:中,任何未处理的受检查异常强制在子句中声明。运行时多态是面向对象最精髓的东西,要实现运行时多态需要方法重写子类继承父类并重写父类中已 1、简述Java程序编译和运行的过程:答:① Java编译程序将Java源程序翻译为JVM可执行代码--字节码,创建完源文件之后,程序会先被编译成 .class 文件。② 在编译好的java程序得到.class文件后,使用命令java 运行这个 .c...

    Yangyang 评论0 收藏0
  • 【金三银四】面试题之java基础

    摘要:中,任何未处理的受检查异常强制在子句中声明。运行时多态是面向对象最精髓的东西,要实现运行时多态需要方法重写子类继承父类并重写父类中已 1、简述Java程序编译和运行的过程:答:① Java编译程序将Java源程序翻译为JVM可执行代码--字节码,创建完源文件之后,程序会先被编译成 .class 文件。② 在编译好的java程序得到.class文件后,使用命令java 运行这个 .c...

    Barrior 评论0 收藏0
  • 经典面试题之“a==1 && a==2 && a==3 为true”

    摘要:所以能用的地方尽量用,相等运算符隐藏的类型转换,会带来一些违反直觉的结果。 这是在国外的一道面试题看到的,大家先自己想一下,在什么情况下这个判断会成立?按正常思维想,这个是不可能成立的,但nothing is impossible,首先贴上正确答案代码 const a = { i: 1, toString: function () { return a.i++; }...

    Bryan 评论0 收藏0
  • Node.js面试题之2017

    摘要:译者按从标准,语法以及模块角度来看,的发展让人目不暇接,那么面试题也得与时俱进。因此,手动检查所有依赖是不现实的。为,加之后返回。自从年双十一正式上线,累计处理了亿错误事件,得到了金山软件百姓网等众多知名用户的认可。 译者按: 从ECMAScript标准,Node.js语法以及NPM模块角度来看,Node.js的发展让人目不暇接,那么面试题也得与时俱进。 原文: Node.js In...

    Alliot 评论0 收藏0
  • 用9种办法解决 JS 闭包经典面试题之 for 循环取 i

    摘要:闭包正确的说应该是指一个闭包域每当声明了一个函数它就产生了一个闭包域可以解释为每个函数都有自己的函数栈每个闭包域对象都有一个不是属性内默认有个名为的全局引用有了这个引用就可以直接调用的属性或方法凡是在闭包域内声明的变量或方法外部无法直接访问 闭包 正确的说,应该是指一个闭包域,每当声明了一个函数,它就产生了一个闭包域(可以解释为每个函数都有自己的函数栈),每个闭包域(Function...

    Betta 评论0 收藏0

发表评论

0条评论

wangbjun

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<