如何判断JS中两个对象是否相等?
① 方法一:通过JSON.stringify(obj)
来判断两个对象转后的字符串是否相等
优点:用法简单,对于顺序相同的两个对象可以快速进行比较得到结果
缺点:这种方法有限制就是当两个对比的对象中key的顺序不是完全相同时会比较出错
② 方法二:Object.getownPropertyNames()
1.用Object.getOwnPropertyNames拿到对象的所以键名数组
2.比对键名数组的长度是否相等
3.比对键名对应的键值是否相等
缺点:对象属性是对象的情况要进行递归
未递归情况:
function isObjectValueEqual(a, b) {var aProps = Object.getOwnPropertyNames(a);var bProps = Object.getOwnPropertyNames(b);if (aProps.length != bProps.length) {return false;}for (var i = 0; i < aProps.length; i++) {var propName = aProps[i];var propA = a[propName];var propB = b[propName];if ( propA !== propB) {return false;}}return true;}
递归情况:
function isObjectValueEqual(a, b) {var aProps = Object.getOwnPropertyNames(a);var bProps = Object.getOwnPropertyNames(b);if (aProps.length != bProps.length) {return false;}for (var i = 0; i < aProps.length; i++) {var propName = aProps[i]var propA = a[propName]var propB = b[propName]// 这里忽略了值为undefined的情况// 故先判断两边都有相同键名if(!b.hasOwnProperty(propName)) return falseif ((propA instanceof Object)) {if (this.isObjectValueEqual(propA, propB)) {// return true 这里不能return ,后面的对象还没判断} else {return false}} else if (propA !== propB) {return false} else { }}return true}var a = {id:1,name:2,c:{age:3}};var b = {id:1,name:2,c:{age:3}}console.log(isObjectValueEqual(a,b));//true
如何判断JS中两个对象是否相等?相关推荐
- js中两个对象的比较
代码取自于underscore.js 1.8.3的isEqual函数. 做了一些小小的修改,主要是Function的比较修改. 自己也加了一些代码解读. <!DOCTYPE html> & ...
- 判断java中两个对象是否相等
一.java中的基本数据类型(int.double.short.long.byte.float.boolean.char)判断是否相等,直接使用"=="就行了,相等返回true,否 ...
- js中两个对象数组如何比对合并
情景 有时候,从后端的数据并非是可以直接使用渲染的,需要经过处理之后才可使用,比如说以下这种情况 //需要将这个数组中的字段合并,渲染在列表中 const array1 = [{id:1,name:' ...
- JS中的event 对象详解
JS中的event 对象详解 JS的event对象 Event属性和方法: 1. type:事件的类型,如onlick中的click: 2. srcElement/target:事件源,就是发生事件的 ...
- JAVA杂谈 —— 1.2 JS比较两个对象内容是否相同
JS比较两个对象内容是否相同 -- JAVA 欢迎观看本博客 题目详情 欢迎观看本博客 您好! 这是我编程上遇到的困惑,现在记录下来.如有疏漏与不足之处还请多多指教. 题目详情 在实际开发中, ...
- js 判断变量是否有值返回bool_基础 |判断 JS 中的变量类型竟然可以如此简单
原标题:基础 |判断 JS 中的变量类型竟然可以如此简单 嗨 这里是IMWEB 一个想为更多的前端人 享知识 助发展 觅福利 有情怀有情调的公众号 欢迎关注转发 让更多的前端技友一起学习发展~ 正文 ...
- JavaScript -- 时光流逝(三):js中的 String 对象的方法
JavaScript -- 知识点回顾篇(三):js中的 String 对象的方法 (1) anchor(): 创建 HTML 锚. <script type="text/javasc ...
- 判断js中的数据类型的方法
在 判断js中的数据类型 我们通常会使用typeOf()方法, typeof 2 输出 number typeof null 输出 ...
- js中关于Blob对象的介绍与使用
js中关于Blob对象的介绍与使用 blob对象介绍 一个 Blob对象表示一个不可变的, 原始数据的类似文件对象.Blob表示的数据不一定是一个JavaScript原生格式 blob对象本质上是js ...
最新文章
- OpenCV(十四)图像阈值
- 数字图像处理- 3.6 锐化空间滤波器
- IOS block 教程
- 8SimpleAdapter:一行显示的数据有图标
- Android App用MulticastSocket监听组播,为什么连接到不同路由、在不同手机上跑,有的能收到有的收不到...
- poj 1006(中国剩余定理+模板题)
- 欢乐纪中A组周六赛【2019.4.13】
- mysql用命令修改主键名_MySQL的常用命令:添加外键,修改字段名称,增加字段 设置主键自增长等...
- Codeforces Gym 100203G G - Good elements 暴力
- Docker 概述 与 CentOS 上安装、卸载、启动
- Python实现获得所有拼音为某个拼音的所有汉字
- 一元二次方程解法的实现(Python)
- 机械寿命预测,多步预测
- 区块链研习 | 什么是IFO
- 资源收藏:扁平化风格的图标
- select 函数使用方法
- mysql中week()函数
- docker daemon.json肯多多
- Jenkins遇到的坑——如何爬出来
- C++使用ADODB连接数据库
热门文章
- pytest和allure生成测试报告
- 小米max2装鸿蒙,小米max2全新玩法,连接电视大屏玩游戏看电影!
- mac安装mysql方法
- GitWeb服务器搭建
- 火星车开发板”SDR Receiver分析说明
- 【嵌入式芯片】GPU,CPU,SOC,DSP,FPGA,ASIC,MCU,MPU,GPP,ECU等简介
- Docker容器-------网络模式,数据卷和数据卷容器
- 知乎采集问答栏目以及文章教学
- 拉勾网职位数据爬取与分析(一)
- python中类重要吗_如何看待有的python程序员从不使用类?