一、问题

  在js中是不能直接用“==”或者“===”来计算两个数组是否相等的,那么就需要对数组的值进行比较;

二、次解决方案

  对于比较两个数组次要的方法有如下几种,为什么说是次要解决方案呢?因为它不能真正称之为对两个数组的对比。

  1. 把两个数组转化为字符串的形式比较,如下:

  a. 当两个数组元素类型相同,顺序相同时,直接判断是否相等,结果不相等;转化为字符串后,结果相等;

var a=[1, 2, 3, 4];
var b = a.slice();
console.log(a);
console.log(b);
console.log(a == b);
console.log(JSON.stringify(a) == JSON.stringify(b));

    运行结果:

    

  2.当两个数组元素类型不同,顺序相同时,用toString()转化为字符串,结果相等;用stringify转化为字符串,结果不相等; 

var a=[1, 2, 3, 4];
var b = ['1', 2, 3, 4];
console.log(a);
console.log(b);
console.log(a.toString() == b.toString());
console.log(JSON.stringify(a) == JSON.stringify(b));

    运行结果如下:

    

  3. 当两个数组不相同时,先排序,再转化为Json字符串比较,结果相等:

var a = [1, 2, 3, 4];
var b = [4, 2, 3, 1];
console.log(a.sort());
console.log(b.sort());
console.log(JSON.stringify(a.sort()) == JSON.stringify(b.sort()));

    运行结果:

    

  4.当数组包含Object时,先排序,再进行比较,结果相等:

var a=[{"x":"abc"}, 2, 3, 4];
var b = [4, 2, 3, {"x":"abc"}];
console.log(a.sort());
console.log(b.sort()); console.log(JSON.stringify(a.sort()) == JSON.stringify(b.sort()));

    运行结果:

    

  从以上可以看出:  

    1. 如果两个数组元素类型相同,顺序相同时,用stringify转化为字符串后进行比较;

    2. 如果两个数组元素类型相同,顺序不相同时,排序后,用stringify转化为字符串再进行比较;

    3.两个数组元素类型不同时,用stringify转化为字符串后进行比较,数组不相等;用toString()转化为字符串后进行比较,数组相等;

三、 解决方案

  比较两个数组是否相等,实质上是比较两相数组的原型是否相等,代码如下:

  

JS学习之--比较两个Object数组是否相等的更多相关文章

  1. 用vue.js学习es6(三):数组、对象和函数的解构

    一.数组的解构: 以前的方式: var arr = [1,2,3]; console.log(arr[0]); //1 console.log(arr[1]); //2 现在的方式: var [a,b ...

  2. Android NDK 学习之接受Java传入Object数组

    本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...

  3. JS 两个对象数组合并并去重

    JS两个对象数组合并并去重 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  4. 我的three.js学习记录(二)

    通过上一篇文章我的three.js学习记录(一)基本上是入门了three.js,但是这不够3D,这次我希望能把之前做的demo弄出来,然后通过例子来分析操作步骤. 1. 示例 上图是之前做的一个dem ...

  5. vue.js 学习笔记3——TypeScript

    目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...

  6. JS学习小结(上)

    学而时习之,不亦说乎,开启JS学习新乐章~ JS是干啥的?网页特效,它主要是实现控制结构和样式,是一种行为,有多重要,不言而喻吧,页面炫酷的资本. 1. JS输出: alert("hello ...

  7. 基于jquery的插件turn.js学习笔记

    基于jquery的插件turn.js学习笔记 简介 turn.js是一个可以实现3d书籍展示效果的jq插件,使用html5和css3来执行效果.可以很好的适应于ios和安卓等触摸设备. How it ...

  8. JS学习:JavaScript的核心

    分享到 分类 JS学习   发布 ourjs  2013-12-02 注意 转载须保留原文链接,译文链接,作者译者等信息.     作者: JeremyWei  原文: JavaScript The ...

  9. js学习之数据类型

    js学习之数据类型 基础类型:number string boolean null undefined 引用类型:object array function undefined值是派生自null值的( ...

随机推荐

  1. ADO.NET 一般操作(c#)

    ADO.NET五大对象:SqlConnection.SqlCommand.SqlDataReader.SqlDataAdapter .DataSet ,其中SqlDataAdapter 不建议使用 一 ...

  2. Django:MTV——模版语句

    1.Django框架介绍 1.1MVC框架(Model View Controller) ​ 全名是Model View Controller ,是软件工程中的一种软件架构模式,把软件分为三个基本部分 ...

  3. 查询本地ip以及ip地址库查询

    四种方法查询本地ip from urllib2 import urlopen from json import load my_ip = urlopen('http://ip.42.pl/raw'). ...

  4. Python 实现自动导入缺失的库

    原文:由浅入深:Python 中如何实现自动导入缺失的库? 作者:豌豆花下猫 在写 Python 项目的时候,我们可能经常会遇到导入模块失败的错误:ImportError: No module nam ...

  5. Duplicate zip entry [com/umeng/analytics/a.class==analytics-5.5.3.jar:com/umeng/analytics/AnalyticsConfig.class

    项目中需要用到Umeng统计分析,按照官网上的步骤做混淆后,在签名时报下面的错误: Error:java.io.IOException:Can't read [/.gradle/caches/modu ...

  6. C语言的三套标准 C89(C90)、C99、C11

    C语言最初由 Dennis Ritchie 于 1969 年到 1973 年在 AT&T 贝尔实验室里开发出来,主要用于重新实现 Unix 操作系统.此时,C语言又被称为 K&R C. ...

  7. Java网上学习资料

    1.今天查找关于代理模式时找到的两个网站:take control with proxy design pattern

  8. Kubernetes 1.15部署日记-使用kubeadm--<1-2-3-4>

    2019年9月17日 由于此次日记篇幅较长blog限制直接使用word发布所以分成几篇来发. 1.环境准备 10.110.149.172|192.168.111.51 K8s-1 Centos7.5 ...

  9. python之变量的数据类型(2)list 、 tuple 及range用法

    一.变量的数据类型(2) 1.list 类型 列表的特点: 列表是一个可变的数据类型 列表由[]来表示, 每一项元素使用逗号隔开. 列表什么都能装. 能装对象的对象. 列表可以装大量的数据 列表的索引 ...

  10. 优化API接口响应速度

    前言 API接口响应慢? SLA一直提不上去? 其实这是后端程序员想进阶必须要跨过去的坎:就是把它优化掉. 那么这其中到底有没有套路呢?答案是:有的. 本文将介绍目前正在用并且十分“无脑”有效的这个套 ...