javascript 常见工具函数(五)

41.深度拷贝对象:

  static deepCopyObj$(obj) {
        var result = Array.isArray(obj) ? [] : {};
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                if (typeof obj[key] === 'object' && obj[key] !== null) {
                    result[key] = Utils$.deepCopyObj$(obj[key]);   //递归复制
                } else {
                    result[key] = obj[key];
                }
            }
        }
        return result;
    }

42.对象属性和值,随机对象中的属性:

 /** 随机对象中的一个属性值 */
    static randomObj$(obj) {
        var keys = Object.keys(obj)
        let targetKey = keys[keys.length * Math.random() << 0];
        return obj[targetKey];


    };

43.比较两个数组是否相同:

static arrDiff(arr1, arr2) {
        let isNaN = Number.isNaN;
        return arr1.reduce(function (previous, i) {
            var found = arr2.findIndex(function (j) {
                return j === i || (isNaN(i) && isNaN(J));
            });
            return (found < 0 && previous.push(i), previous);
        }, []);
    };

44.字符串数组提取数字元素,并且转化为数组:

let showNumArr = this.zsConfig.zs_native_end_before_num.replace(/[^0-9]/ig,",").split(",");
showNumArr.shift();
showNumArr.pop();

45.字符串匹配 .jpg后缀以及.png后缀的图片地址:

regImgUrl$(str) {
        var reg = /http:\/\/.*?(gif|png|jpg)/gi;
        var reg2 = /https:\/\/.*?(gif|png|jpg)/gi;
        if (str.match(reg) && str.match(reg).length > 0) {
            return str.match(reg)[0];
        }
        if (str.match(reg2) && str.match(reg2).length > 0) {
            return str.match(reg2)[0];
        }
    }

46.计算时间戳间隔:

static calculateDiffTime$(start_time) {
        if (!parseInt(start_time)) return "-";
        var endTime = Math.round(new Date() / 1000);


        var timeDiff = endTime - start_time
        var day = parseInt(timeDiff / 86400);
        var hour = parseInt((timeDiff % 86400) / 3600);
        var minute = parseInt((timeDiff % 3600) / 60);


        day = day ? (day + '天') : 0;
        hour = hour ? (hour + "时") : 0;
        minute = minute ? (minute + "分") : 0;
        return day;   //注意这里返回的是字符串
    }

47.转化日期,时分秒格式,发送服务端用于:

 static dateFormat$(fmt, date) {
        let ret;
        const opt = {
            "y+": date.getFullYear().toString(),        // 年
            "M+": (date.getMonth() + 1).toString(),     // 月
            "d+": date.getDate().toString(),            // 日
            "h+": date.getHours().toString(),           // 时
            "m+": date.getMinutes().toString(),         // 分
            "s+": date.getSeconds().toString()          // 秒
            // 有其他格式化字符需求可以继续添加,必须转化成字符串
        };
        for (let k in opt) {
            ret = new RegExp("(" + k + ")").exec(fmt);
            if (ret) {
                fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
            };
        };
        return fmt;
    }

48.格式化数字:

 static formatNumber$(num) {
        if (isNaN(num)) return "0";
        if (num > 1000000) {
            num /= 1000000;
            if (num >= 100) {
                return Math.round(num) + "m"
            } else if (num >= 10) {
                num = num.toFixed(1);
                return num + "m"
            } else {
                num = num.toFixed(2);
                return num + "m"
            }
        } else if (num > 1000) {
            num /= 1000;
            if (num >= 100) {
                return Math.round(num) + "k"
            } else if (num >= 10) {
                num = num.toFixed(1);
                return num + "k"
            } else {
                num = num.toFixed(2);
                return num + "k"
            }
        } else {
            return Math.round(num);
        }
    }

49.身份证号判断是否成年;

 /**
    * 根据身份证号得到姓别和精确计算年龄
    */
    static analyzeIDCard$(IDCard){
       //获取用户身份证号码
       let userCard = IDCard;
       //如果身份证号码为undefind则返回空
       if(!userCard){
           return false;
       }
       //获取出生年月日
       let yearBirth = userCard.substring(6,10);
       let monthBirth = userCard.substring(10,12);
       let dayBirth = userCard.substring(12,14);
       //获取当前年月日并计算年龄
       let myDate = new Date();
       let monthNow = myDate.getMonth() + 1;
       let dayNow = myDate.getDate();
       let age = myDate.getFullYear() - yearBirth;
       if(monthNow < monthBirth || (monthNow == monthBirth && dayNow < dayBirth)){
           age--;
       }
       if (age >= 18) { return true; }
       return false;
   }

50.数字转中文:

  /**
     * 数字转中文
     * @param {*} num
     * @returns
     */
    static toChinesNum$(num) {
        let changeNum = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
        let unit = ["", "十", "百", "千", "万"];
        num = parseInt(num);
        let getWan = (temp) => {
            let strArr = temp.toString().split("").reverse();
            let newNum = "";
            for (var i = 0; i < strArr.length; i++) {
                newNum = (i == 0 && strArr[i] == 0 ? "" : (i > 0 && strArr[i] == 0 && strArr[i - 1] == 0 ? "" : changeNum[strArr[i]] + (strArr[i] == 0 ? unit[0] : unit[i]))) + newNum;
            }
            return newNum;
        }
        let overWan = Math.floor(num / 10000);
        let noWan = num % 10000;
        if (noWan.toString().length < 4) { noWan = "0" + noWan; }
        return overWan ? getWan(overWan) + "万" + getWan(noWan) : getWan(num);
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信好友添加频繁的原因

01 微信好友添加频繁的原因 1. 添加好友的频率太高&#xff1a;短时间内添加多个好友&#xff0c;系统会认为账号被盗&#xff0c;从而限制用户添加好友&#xff1b; 2. 频繁的发送好友请求&#xff1a;在短时间内连续发送好友请求&#xff0c;也会导致微信限制操作&#xff0…

系列五、搭建Naco(集群版)

一、搭建Naco&#xff08;集群版&#xff09; 1.1、前置说明 &#xff08;1&#xff09;64位Red Hat7 Linux 系统&#xff1b; &#xff08;2&#xff09;64位JDK1.8&#xff1b;备注&#xff1a;如果没有安装JDK&#xff0c;请参考【系列二、Linux中安装JDK】 &#xff08;3&…

HbuilderX中的git的使用

原文链接https://blog.csdn.net/Aom_yt/article/details/119924356

【C++入门】类和对象(完)

前言 在谈论C时&#xff0c;常常会涉及到一些高级特性和概念&#xff0c;比如初始化列表、static成员、友元、内部类、匿名对象等。这些概念在C编程中起着非常重要的作用&#xff0c;对于想要深入了解C语言的开发者来说&#xff0c;掌握这些知识是至关重要的。本文&#xff0c;…

LeetCode第32题 : 最长有效括号

题目介绍 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 示例 1&#xff1a; 输入&#xff1a;s "(()" 输出&#xff1a;2 解释&#xff1a;最长有效括号子串是 "()" 示例 2&#xf…

SpringBoot整合mybatis多数据源

废话不多说先上结果 对应数据库 首先导入所需的mybatis、mysql和lombok依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependen…

关于我花费六千多组了台window+Linux主机

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 写在前面 我在2023年12月组了一台“洋垃圾”的主机&#xff0c;一边当做台式机使用&#xff0c;一边当做服务器使用。这个方案算是相对比较划算的方案。我开始是打算直接单做服务器使用的&#xff0c;以及内存…

【好书推荐】只更新软件,座椅为何能获得加热功能?《一书读懂物联网:基础知识+运行机制+工程实现》

文章目录 什么是OTA&#xff1f;OTA方案的特点时间短、效率高合理使用无线资源&#xff0c;提升终端更新的服务效率高可靠性通用性 OTA系统的参考架构和服务流程结语 2020年&#xff0c;特斯拉发布过一次OTA更新&#xff0c;车主可以通过这次系统更新获得座椅加热功能。当时&am…

微信小程序使用echarts报错 ReferenceError: Image is not defined 解决

报错 ReferenceError: Image is not defined 在用uni-app开发微信小程序时&#xff0c;使用到了echarts&#xff08;V4.6.0&#xff09;配置项中的icon属性&#xff0c;微信开发者工具报错如下&#xff1a; 定位问题 定位问题到了压缩echarts文件中的new Image 使用非压缩…

LiveGBS国标GB/T28181流媒体平台功能-国标级联中作为下级平台对接海康大华宇视华为政务公安内网等GB28181国标平台查看级联状态及会话

LiveGBS国标级联中作为下级平台对接海康大华宇视华为政务公安内网等GB28181国标平台查看级联状态及会话 1、GB/T28181级联是什么2、搭建GB28181国标流媒体平台3、获取上级平台接入信息3.1、如何提供信息给上级3.2、上级国标平台如何添加下级域3.2、接入LiveGBS示例 4、配置国标…

脆弱的SSL加密算法漏洞原理以及修复方法

漏洞名称&#xff1a;弱加密算法、脆弱的加密算法、脆弱的SSL加密算法、openssl的FREAK Attack漏洞 漏洞描述&#xff1a;脆弱的SSL加密算法&#xff0c;是一种常见的漏洞&#xff0c;且至今仍有大量软件支持低强度的加密协议&#xff0c;包括部分版本的openssl。其实&#xf…

【深度学习-图像分类】03 - VGG 论文学习与总结

论文地址&#xff1a;VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION 论文学习 1. 摘要 这篇论文探讨了在大规模图像识别任务中&#xff0c;卷积神经网络&#xff08;ConvNets&#xff09;深度对其准确性的影响。作者的主要贡献是对不断增加深度的网络…

mybatis-flex笔记

MyBatis-Flex 的增删改功能 - MyBatis-Flex 官方网站https://mybatis-flex.com/zh/base/add-delete-update.html 代码https://gitee.com/hntianshu/mybatis-flex-test 一 新增数据 不忽略 null 值。 就是允许有null 忽略null 就是不允许有null BaseMapper 的接口提供了 inser…

Vue3-33-路由-路由的别名配置 alias

别名的作用 路由中的别名配置&#xff0c;可以实现 多个路径 对应 同一个路由。 例如 &#xff1a; 路由的路径是 /a; 配置别名为 &#xff1a; /a2; 则 访问 /a 或 /a2 的时候&#xff0c;都可以访问到 同一个组件。 别名的特点 关键字 &#xff1a; alias 当通过别名进行路由…

将 Python 和 Rust 融合在一起,为 pyQuil® 4.0 带来和谐

文章目录 前言设定方向从 Rust 库构建 Python 软件包改装 pyQuil异步困境回报&#xff1a;功能和性能结论 前言 pyQuil 一直是在 Rigetti 量子处理单元&#xff08;QPUs&#xff09;上构建和运行量子程序的基石&#xff0c;通过我们的 Quantum Cloud Services&#xff08;QCS™…

擎创技术流 |如何使用eBPF监控NAT转换

一、NAT简介 Linux NAT&#xff08;Network Address Translation&#xff09;转换是一种网络技术&#xff0c;用于将一个或多个私有网络内的IP地址转换为一个公共的IP地址&#xff0c;以便与互联网通信。 图源于网络 在k8s业务场景中&#xff0c;业务组件之间的关系十分复杂. …

【LabVIEW FPGA入门】创建第一个LabVIEW FPGA程序

本教程仅以compactRIO&#xff08;FPGA-RT&#xff09;举例 1.系统配置 1.1软件安装 FPGA-RT 1. LabVIEW Development System (Full or Professional) 2. LabVIEW Real-Time Module 3. LabVIEW FPGA Module 4. NI-RIO drivers 1.2硬件配置 1.使用线缆连接CompactRIO至主机…

OpenHarmony之HDF驱动框架

概述 HDF&#xff08;Hardware Driver Foundation&#xff09;驱动框架&#xff0c;为驱动开发者提供驱动框架能力&#xff0c;包括驱动加载、驱动服务管理、驱动消息机制和配置管理。并以组件化驱动模型作为核心设计思路&#xff0c;让驱动开发和部署更加规范&#xff0c;旨在…

鸟类识别与分类

Littro 双波段T型云台成像AI一体机是利卓公司结合了红外热成像、可见光相机与边缘计算为一体的整机产品。 产品同时支持双波段成像&#xff0c;基于瞳赋Tofu3智能识别模块的AI算法可以克服因光线不足、背景复杂造成的诸多不利因素&#xff0c;完成目标检测、识别、跟踪等多种功…

RabbitMQ集群的简单说明

1.普通集群(副本集群) 当集群中某一时刻master主节点宕机&#xff0c;可以对master中Queue中的消息进行备份。而就算master宕机了&#xff0c;从节点不会对外提供服务&#xff0c;等到master节点恢复后&#xff0c;系统才会恢复正常。 主从架构的缺点是队列中的消息只是位于主节…