JS判断对象是否发生变化,常用于监听页面表单是否修改并给出保存提示

news2024/11/27 17:44:50

本文主要封装方法,实现用户离开表单编辑页面时弹出提示框,若表单数据发生变化,则提示用户是否保存当前页面的信息,如图:

封装方法:

/**
 * 比较俩个对象之间的差异,项目中多处用到监听表单数据是否改动,故封装此方法
 * 如果数据改动,则返回新旧对象记录改动字段的新旧值
 *
 * by wang
 * */
export function diffObj(obj1, obj2) {
  function getTypeByObj (obj) {
    return Object.prototype.toString.call(obj).match(/^\[object ([a-zA-Z]*)\]$/)[1];
  }
  function isEmptyObject (obj) {
    for (let key in obj) {
      return false;
    };
    return true;
  }
  if (!obj1 || isEmptyObject(obj1) || !obj2 || isEmptyObject(obj2)) {
    return null;
  }
  let diffRes = {
    old_val: {},
    new_val: {}
  };
  for (let k in obj2) {
    // 判断数据类型是否一致
    if (getTypeByObj(obj2[k]) === getTypeByObj(obj1[k])) {
      // 比较 “Array”和“Object”类型
      if (getTypeByObj(obj2[k]) === 'Array' || getTypeByObj(obj2[k]) === 'Object') {
        const diffData = diffObj(obj1[k], obj2[k]);
        if (!isEmptyObject(diffData)) {
          diffRes.old_val[k] = diffData.old_val;
          diffRes.new_val[k] = diffData.new_val;
        }
      } else if (obj1[k] !== obj2[k]) { // 比较其他类型数据
        diffRes.old_val[k] = obj1[k];
        diffRes.new_val[k] = obj2[k];
      }
    } else {
      if ([undefined, null, ''].includes(obj1[k]) && [undefined, null, ''].includes(obj2[k])) {
        // 这三类数据可视为相等,不做处理
      }else {
        diffRes.old_val[k] = obj1[k];
        diffRes.new_val[k] = obj2[k];
      }
    }
  }
  // 若没有变化,返回null
  if (isEmptyObject(diffRes.old_val) || isEmptyObject(diffRes.new_val)) {
    return null;
  }
  return diffRes;
}

如果返回值为null,则代表没有改变,否则返回改变的属性和值,如图:

脚踏实地行,海阔天空飞~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/976410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

配电室能耗数据采集系统

随着社会的快速发展,能源消耗逐年增加,能源问题已成为制约我国经济社会发展的瓶颈。在此背景下,节能减排、绿色发展成为国家战略,而配电室作为电力系统的重要组成部分,其能耗管理对整个电力系统的能效有着举足轻重的影…

SQL sever中表数据管理

目录 一、插入数据: 二、更新数据: 三、删除数据: 四、清空数据: 4.1使用DELETE语句: 4.2 使用TRUNCATE TABLE语句: 4.3区别: 4.3.1DELETE FROM: 4.3.2TRUNCATE TABLE&am…

正文—态路小课堂丨光模块安装与拆卸的小指南

点击蓝字 | 关注我们 TARLUZ态路 光模块通常由非常精密的光学元件组成,对于光信号的接收和发射非常敏感。静电和光口污染对光模块信号传输有着很大的影响。静电会导致光模块器件的性能降低、寿命缩短,可能会造成不可逆的损坏。光口污染会导致光信号的衰…

“海葵”强势来袭,台风天如何做好防涝排水工作?

中央气象台9月4日06时发布台风黄色预警:今年第11号台风“海葵”(HAIKUI)的中心已于昨天(9月3日)晚上7点50分前后移入台湾海峡南部海面。 预计,“海葵”将以每小时10公里左右的速度向西偏北方向移动&#xf…

提振印度市场?iPhone15首发之一,富士康工厂将提前生产iPhone15

根据金融时报的报道,苹果公司计划将印度作为其新款 iPhone 15 的首发市场之一。以往的经验显示,印度市场通常会比其他市场延迟一个月左右才能上市,但今年情况将发生变化。据报道,位于印度东南部城市金奈的富士康工厂计划在9月中旬…

浅析安防视频监控平台EasyCVR视频融合平台接入大量设备后是如何维持负载均衡的

安防视频监控平台EasyCVR视频融合平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备…

qemu/kvm学习笔记

qemu/kvm架构 cpu虚拟化的示例 Reference: kvmtest.c [LWN.net] 主要步骤: QEMU通过/dev/kvm设备文件发起KVM_CREATE_VM ioctl,请求KVM创建一个虚拟机。KVM创建虚拟机相应的结构体,并为QEMU返回一个虚拟机文件描述符QEMU通过虚拟机文件描述…

【每日一题】54. 螺旋矩阵

54. 螺旋矩阵 - 力扣(LeetCode) 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5…

电脑内存不足怎么办?分享4个释放空间小妙招!

“我的电脑好像也没有保存什么很大的文件,为什么总会显示电脑内存不足呀?现在电脑非常的卡,有什么好用的方法可以快速清理电脑内存吗?希望大家给我出出主意!” 我们在使用电脑时,可能电脑悄悄地保存了很多的…

线下沙龙 | 从营销扩张到高效回款,游戏公司如何通过全链路运营实现高质量出海!

游戏出海,是近些年来中国产业的风暴出口,在2020至2023年期间保持着绝对的领航地位。公开数据显示,过去4年里,游戏在各类App出海份额中总体保持稳定,高达 64.9%。 但毕竟海外是陌生的市场,我们见过太多折戟沉…

Windows——安装 Microsoft 便签

打开 Microsoft Store。 搜索 Microsoft 便签,点击安装。

How to clean up Graylog Default index set log

一、前言: Graylog 满了,没有自动清理 挤爆硬盘空间,手动清理流程: 二、问题描述: Elasticsearch nodes disk usage above high watermark (triggered a few seconds ago)mree are ast search modes i the use wtm a mos mo re disk ther dsk s saoe me e waemak f ths…

ant vue3 自定义table一行两列

效果图 table代码 <a-tablesize"small":columns"columns":row-key"(record, index) > index 1":data-source"tableInfo.data":pagination"false"change"handleTableChange"resizeColumn"handleResiz…

Hashtable和HashMap、ConcurrentHashMap 之间的区别

Hashtable和HashMap的区别 HashMap和Hashtable都是哈希表数据结构&#xff0c;但是Hashtable是线程安全的&#xff0c;HashMap是线程不安全的 Hashtable实现线程安全就是简单的把关键方法都加上了synchronized关键字 直接在方法上添加synchronized相当于针对this对象&#xff0…

Linux cat 的作用

Linux中的cat命令用于连接文件并打印到标准输出设备&#xff08;通常是终端&#xff09;。 它的主要作用有以下几点&#xff1a; 查看文件内容&#xff1a;cat命令可用于查看文本文件的内容&#xff0c;将文件的内容从第一行到最后一行打印到终端。 合并文件&#xff1a;cat命…

你们真的感觉Python那么好用吗?

最近一些工作需要用Python来做&#xff0c;我把我遇到的不开心说出来让大家开心开心。PYTHON是一门很伟大的语言&#xff0c;而且有很多有用的框架都是用PYTHON写的&#xff01;这只是我个人的感受不一定对&#xff0c;别太认真。就当一个故事听&#xff01; 先说我一些库装了以…

ChatGPT追祖寻宗:GPT-1论文要点解读

论文地址&#xff1a;《Improving Language Understanding by Generative Pre-Training》 最近一直忙着打比赛&#xff0c;好久没更文了。这两天突然想再回顾一下GPT-1和GPT-2的论文&#xff0c; 于是花时间又整理了一下&#xff0c;也作为一个记录~话不多说&#xff0c;让我们…

C. Assembly via Minimums

题目&#xff1a;样例&#xff1a; 输入 5 3 1 3 1 2 10 4 7 5 3 5 3 3 5 2 2 2 2 2 2 2 2 2 2 5 3 0 0 -2 0 -2 0 0 -2 -2输出 1 3 3 10 10 7 5 3 12 2 2 2 2 2 0 -2 0 3 5 思路&#xff1a; 数学思维题&#xff0c;构造算法&#xff0c;这里我们从样例中可以知道&#xff0c;…

当我出现在股友面前,他们笑了,这是来自最佳策略app平台的自信

我的人生就仿佛被提前安排好了一样&#xff1a;三年的自考&#xff0c;三年的打工&#xff0c;五年的炒股等等&#xff0c;这么丰富的履历&#xff0c;小说男主都很少有&#xff0c;可这一切都发生在我的身上。 不知道怎么回事&#xff0c;高考我竟然睡着了&#xff0c;我就这样…

【excel密码】如何保护部分excel单元格?

Excel文件可以设置保护工作表&#xff0c;那么可以只保护工作表中的部分单元格&#xff0c;其他地方可以正常编辑吗&#xff1f;当然是可以的&#xff0c;今天我们学习&#xff0c;如何设置保护部分单元格。 首先&#xff0c;我们先将整张工作表选中&#xff08;Ctrl A&#…