一、问题

  在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. quartz2.3.0(十三)数据库持久化定时器job任务和trigger触发器,在多个调度器实例情况下,由其它调度器实例恢复执行调度器宕机的job任务

    一.初始化数据库11张quartz表:qrtz_*   先从官网下载好quartz2.3.0包:http://www.quartz-scheduler.org/downloads/ 解压后进入目录:q ...

  2. Java多线程系列——锁的那些事

    引入 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率. 下面先带大家来总体预览一下锁的分类图 java锁的具体实现类 1.乐观锁 VS 悲观锁 乐观锁与悲观锁是 ...

  3. golang ---调用window api函数执行程序

    package main import "syscall" import "unsafe" func main() { var hand uintptr = u ...

  4. Java 理论和实践: 了解泛型 识别和避免学习使用泛型过程中的陷阱

    Brian Goetz (brian@quiotix.com), 首席顾问, Quiotix 简介: JDK 5.0 中增加的泛型类型,是 Java 语言中类型安全的一次重要改进.但是,对于初次使用泛 ...

  5. Apach Shiro MD5密码加密过程(明文生成密码过程)详细解析

    前言: 最近再项目当中使用的ApachShiro安全框架,对于权限和服务器资源的保护都有一个很好的管理.前期主要参考的文章有 项目中设计密码的加盐处理以及二次加密问题,跟着断点 一步步揭开Apach ...

  6. STL之 stack的基础应用

    头文件 #include<stack> stack<int>  s; stack<char> s;//定义一个名字为s 的存int char的stack 基本指令 ...

  7. Java8新特性——Lambda表达式-1

    一.抛出需求 超市中挑选苹果,挑选条件多样化. 示例:找出绿色并且重量等于150的苹果,找出红色并且重量小于120苹果. 1.苹果类 public class Apple { private Stri ...

  8. netcore 版本升级 导致的cookie验证失败

    排查了两天的问题,本来都是运行正常的cookie验证,突然不好用了,服务器获取不到cookie信息. 我确实是升级了.netcore sdk,之前是2.2.102,后来升级成了2.2.107,一开始并 ...

  9. BUAAOO-Final-Summary

    目录 总结本单元两次作业的架构设计 总结自己在四个单元中架构设计及OO方法理解的演进 总结自己在四个单元中测试理解与实践的演进 总结自己的课程收获 立足于自己的体会给课程提三个具体改进建议 两次架构设 ...

  10. centos下安装nginx(转载)

    http://blog.csdn.net/u010246789/article/details/51501710 有声明,不能转载,所以,就把地址弄了过来