如何判断两个对象/数组相等

简介: 如何判断两个对象/数组相等

0.明确两点


1.当两个引用指向同一个对象时,对象才是相等的;

1. var obj1 = {a:1}
2. var obj2 = obj1

2.obj1 == obj2    结果为false

1. var obj1 = {a:1}
2. var obj2 = {a:1}

1.判断两个对象相等


(1)把两个对象转译成字符串进行对比


JSON.stringify(object1) === JSON.stringify(object2);

这个方法只适用于完全相同的,即键-值顺序都完全对应的对象

(2)Object.keys()


// 列出所有的键,接着遍历数组
    function ifCompare(object1, object2) {
      var o1keys = Object.keys(object1);
      var o2keys = Object.keys(object2);
      if (o2keys.length !== o1keys.length) return false;
      for (let i = 0; i <= o1keys.length - 1; i++) {
        let key = o1keys[i];
        if (!o2keys.includes(key)) return false;
        if (object2[key] !== object1[key]) return false;
      }
      return true;
    }

(3)ES6


Object.entries(object1).toString() === Object.entries(object2).toString();

(4)lodash 的 isEqual 函数


_.isEqual(value, other)

  1. value(*): 用来比较的值。
  2. other(*): 另一个用来比较的值。
  3. (boolean): 如果 两个值完全相同,那么返回 true,否则返回 false
var object = { 'a': 1 };
var other = { 'a': 1 };
_.isEqual(object, other);
// => true
object === other;
// => false

2.判断数组是否相等


(1)lodash 的 isEqual 函数

(2)使用toString()方法

(3)借助JSON的stringify()方法

(注:如果要比较元素是否相同,但元素位置打乱的话,先用sort()排序再比较)

相关文章
|
开发框架 JavaScript 前端开发
UniApp Button讲解
UniApp Button讲解
398 1
|
开发工具 git
git基于tag创建分支
git基于tag创建分支
Angular 中的响应式表单:监听变化
Angular 中的响应式表单:监听变化
168 0
|
12月前
|
存储 缓存 JavaScript
一文带你了解vuex和使用(2024年11月)
欢迎来到我的博客,我是自学前端两年半的大一学生,熟悉JavaScript与Vue,正向全栈发展。本篇介绍了Vuex,Vue.js的状态管理模式,包括其核心概念如state、getter、mutation、action及模块化使用,通过集中管理状态确保应用状态的可预测变化。文章详细解析了Vuex的工作原理,特别是与Vue的computed属性和响应式系统的集成,以及如何在实际项目中搭建和使用Vuex。如果你觉得有帮助,欢迎关注,我将持续更新更多技术文章。🎉🎉🎉
1191 0
|
Linux
详细解读CPUAffinity(CPU亲合力)
详细解读CPUAffinity(CPU亲合力)
326 0
|
JSON 资源调度 JavaScript
ES Module使用-原理-包管理工具npm(一)
ES Module使用-原理-包管理工具npm
477 0
ES Module使用-原理-包管理工具npm(一)
|
JavaScript
【Js】检查Date对象是否为Invalid Date
【Js】检查Date对象是否为Invalid Date
447 0
|
存储 开发者
钉钉企业内部应用与第三方企业应用的主要区别
钉钉企业内部应用与第三方企业应用的主要区别
703 1
|
SQL 存储 消息中间件
快手基于 Apache Flink 的实时数仓建设实践
快手实时数据开发工程师冯立,快手实时数据开发工程师羊艺超,在 Flink Forward Asia 2022 实时湖仓专场的分享。
快手基于 Apache Flink 的实时数仓建设实践
uniapp制作录音播放功能
uniapp制作录音播放功能
491 0