js中字符串string,遍历json/Object【匹配url、邮箱、电话,版本号,千位分割,判断回文】

目录

正则

合法的URL

邮箱、电话

字符串方法

千位分割:num.slice(render, len).match(/\d{3}/g).join(',')

版本号比较

判断回文

json/Object

遍历

自身属性

for...in+hasOwnProperty(key)

Object.获取数组(obj):Object.keys,Object.values ,Object.entries

+原型链

for...in

嵌套深:递归->栈

正则

合法的URL

URL结构一般包括协议、主机名、主机端口、路径、请求信息、哈希

  1. 域名不区分大小写:"www"子域名(可选)、二级域名、"com"顶级域名
  2. 只能包含字母(a-z、A-Z)、数字(0-9)和连字符(-)(但-不能再首尾)
https://www.bilibili.com/video/BV1F54y1N74E/?spm_id_from=333.337.search-card.all.click&vd_source=6fd32175adc98c97cd87300d3aed81ea
//开始:                     ^
//协议:                     http(s)?:\/\/
//域名:                     [a-zA-Z0-9]+-[a-zA-Z0-9]+|[a-zA-Z0-9]+
//顶级域名 如com cn,2-6位:   [a-zA-Z]{2,6}
//端口 数字:                (:\d+)?
//路径 任意字符 如 /login:   (\/.+)?
//哈希 ? 和 # ,如?age=1:    (\?.+)?(#.+)?
//结束:                      $
//     https://           www.bilibili                com    /video/BV1F54y1N74E  ?spm..            
/^(http(s)?:\/\/)?(([a-zA-Z0-9]+-[a-zA-Z0-9]+|[a-zA-Z0-9]+)\.)+([a-zA-Z]{2,6})(:\d+)?(\/.+)?(\?.+)?(#.+)?$/.test(url)

邮箱、电话

// 电话号码格式:(XXX) XXX-XXXX 或 XXX-XXX-XXXX 或 XXXXXXXXXX
function isValidPhoneNumber(phoneNumber) {
    const phoneRegex = /^(\(\d{3}\)\s?|\d{3}[-.\s]?)?\d{3}[-.\s]?\d{4}$/;
    return phoneRegex.test(phoneNumber);
}

// 示例
console.log(isValidPhoneNumber("(123) 456-7890"));  // true
console.log(isValidPhoneNumber("123-456-7890"));    // true
console.log(isValidPhoneNumber("1234567890"));       // true
console.log(isValidPhoneNumber("12345"));            // false

function isValidEmail(email) {
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return emailRegex.test(email);
}

// 示例
console.log(isValidEmail("user@example.com"));        // true
console.log(isValidEmail("user@.com"));               // false
console.log(isValidEmail("invalid.email@domain"));    // false

字符串方法

千位分割:num.slice(render, len).match(/\d{3}/g).join(',')

  const format = (n) => {
        let num = n.toString() // 拿到传进来的 number 数字 进行 toString
        let len = num.length // 在拿到字符串的长度
        // 当传进来的结果小于 3 也就是 千位还把结果返回出去 小于3 不足以分割
        if (len < 3) {
            return num
        } else {
            let render = len % 3 //传入 number 的长度 是否能被 3 整除
            if (render > 0) { // 说明不是3的整数倍
                return num.slice(0, render) + ',' + num.slice(render, len).match(/\d{3}/g).join(',')
            } else {
                return num.slice(0, len).match(/\d{3}/g).join(',')
            }
        }
    }

    let str = format(298000)
    console.log(str)

版本号比较

/**
 * 解法一:分割截取
 * 思路:
 *(1)先根据.号分割成字符串数组,获取两个数组中的最大长度值,
 *(2)按顺序遍历比较,详细过程看以下代码
 * 时间复杂度:O(max(n, m))
 * 空间复杂度:O(max(n, m))
 */
export function compare(version1, version2){
    const arr1 = version1.split('.')
    const arr2= version2.split('.')
    const maxLen = Math.max(arr1.length, arr2.length)
    
    for (let i = 0; i < maxLen; i++) {
        // arr1[i] - '0' ,js 会强制转换成 number 然后相减
        // 例如:('01' - '0'), 结果是 1 (number 类型)
        // @ts-ignore
        const num1 = arr1[i] ? parseInt(arr1[i]): 0 
        // @ts-ignore
        const num2 = arr2[i] ? parseInt(arr2[i]): 0
        if (num1 > num2) return 1
        if (num1 < num2) return -1
    }
    
    return 0
} 

判断回文

function isPalindrome(str) {
    return str === str.split('').reverse().join('');
}

json/Object

遍历

自身属性

for...in+hasOwnProperty(key)

for (let key in myObject) {
  if (myObject.hasOwnProperty(key)) {
    console.log(key, myObject[key]);
  }
}

Object.获取数组(obj):Object.keys,Object.values ,Object.entries

const myObject = { a: 1, b: 2, c: 3 };

Object.keys(myObject).forEach(key => {
  console.log(key, myObject[key]);
});

Object.values(myObject).forEach(value => {
  console.log(value);
});

Object.entries(myObject).forEach(([key, value]) => {
  console.log(key, value);
});

+原型链

for...in

嵌套深:递归->栈

//递归
function recursion() {
    let res;
    res+=recursion(...);
    return res;
}
//栈
function iterative() {
    let res;
    const stack = [root]; 
    while (stack.length > 0) {
        const current = stack.pop(); 
        res+=...
        stack.push();
    }
    return res;
}

递归方法可能会导致 "栈溢出" 错误,js有一个限制,防止函数调用自身太多次。

// 示例使用
const a = {
    num: NaN,
    children: [
        { num: 10, children: [] },
        { num: 'not a number', children: [
            { num: '3', children: [] }
        ]}
    ]
};

//递归
function sumNumbers(obj) {
    let sum = 0;

    const num=Number(current.num)
    if (typeof num=== 'number'&& !isNaN(num)) {
       sum += num
    }
    if (Array.isArray(obj.children)) {
        for (const child of obj.children) {
            sum += sumNumbers(child);
        }
    }

    return sum;
}
//栈
function sumNumbersIterative(root) {
    let sum = 0;
    const stack = [root]; 
    while (stack.length > 0) {
        const current = stack.pop(); 
        const num=Number(current.num)
        if (typeof num=== 'number'&& !isNaN(num)) {
            sum += num
        }

        if (Array.isArray(current.children)) {
            for (const child of current.children) {
                stack.push(child);
            }
        }
    }

    return sum;
}



console.log(sumNumbersIterative(a)); // 应输出13

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

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

相关文章

ENVI下基于知识决策树提取地表覆盖信息

基于知识的决策树分类是基于遥感影像数据及其他空间数据,通过专家经验总结、简单的数学统计和归纳方法等,获得分类规则并进行遥感分类。分类规则易于理解,分类过程也符合人的认知过程,最大的特点是利用的多源数据。 决策树分类主要的工作是获取规则,本文介绍使用CART算法…

10 个能恢复硬盘丢失文件的数据恢复软件

用于从计算机、外部硬盘驱动器、USB 闪存驱动器、存储卡或其他存储设备恢复丢失、删除或损坏的数据的软件称为数据恢复软件。该软件会在存储设备中搜索丢失或损坏的文件的痕迹&#xff0c;然后再尝试恢复它们。 导致数据丢失或损坏的原因有多种&#xff0c;包括硬件故障、格式…

【论文笔记】《Learning Deconvolution Network for Semantic Segmentation》

重要说明&#xff1a;严格来说&#xff0c;论文所指的反卷积并不是真正的 deconvolution network 。 关于 deconvolution network 的详细介绍&#xff0c;请参考另一篇博客&#xff1a;什么是Deconvolutional Network&#xff1f; 一、参考资料 Learning Deconvolution Netwo…

朴素贝叶斯

一、数学基础 先验概率&#xff08;Prior Probability&#xff09;&#xff1a; 先验概率是在考虑任何新观测数据之前&#xff0c;基于先前的知识或信仰&#xff0c;对事件发生的概率的初始估计。这是对事件的主观先验信仰或经验的量化体现。 记作 P(A)&#xff0c;表示事件 …

NFS远程共享存储

NFS&#xff1a;Network File System 网络文件系统&#xff0c;NFS 和其他文件系统一样&#xff0c;是在 Linux 内核中实现的&#xff0c;因此 NFS 很难做到与 Windows 兼容。NFS 共享出的文件系统会被客户端识别为一个文件系统&#xff0c;客户端可以直接挂载并使用。是Unix系…

《Vue3 基础知识》 Vue2+ElementUI 自动转 Vue3+ElementPlus(GoGoCode)

前言 GoGoCode 一个基于 AST 的 JavaScript/Typescript/HTML 代码转换工具。 AST abstract syntax code 抽象语法树。 实现 第一步&#xff1a;安装 GoGoCode 插件 全局安装最新的 gogocode-cli 即可 npm i gogocode-cli -g查看版本 gogocode-cli -V相关插件说明 插件描述…

2024初学编曲免费软件FL Studio21.2.2

FL Studio在业内也被称作“水果”软件&#xff0c;这是一款功能强大、简单易上手的专业编曲软件。软件中的音效插件库拥有超过25种音效插件&#xff0c;能够帮助激发我们的创作灵感。而FL Studio中文还推出了训练营课程&#xff0c;初学者可以在训练营中进行编曲知识的学习&…

1888_关于多任务调度的一些整理与思考

全部学习汇总&#xff1a; g_embedded: 嵌入式通用技术学习笔记 (gitee.com) 让我想来对此做一下总结思考的书其实不是嵌入式或者至少不限于嵌入式&#xff0c;但是我的主业是嵌入式&#xff0c;对于问题的理解点暂时也是在这个领域。后续&#xff0c;这些知识对我自己能够产生…

Ubuntu使用Docker部署Redis并实现远程访问本地数据库

文章目录 前言1. 安装Docker步骤2. 使用docker拉取redis镜像3. 启动redis容器4. 本地连接测试4.1 安装redis图形化界面工具4.2 使用RDM连接测试 5. 公网远程访问本地redis5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Ub…

以梦为码,CodeArts Snap 缩短我与算法的距离

背景 最近一直在体验华为云的 CodeArts Snap&#xff0c;逐渐掌握了使用方法&#xff0c;代码自动生成的准确程度大大提高了。 自从上次跟着 CodeArts Snap 学习用 Python 编程&#xff0c;逐渐喜欢上了 Python。 我还给 CodeArts Snap 起了一个花名&#xff1a; 最佳智能学…

深入浅出hdfs-hadoop基本介绍

一、Hadoop基本介绍 hadoop最开始是起源于Apache Nutch项目&#xff0c;这个是由Doug Cutting开发的开源网络搜索引擎&#xff0c;这个项目刚开始的目标是为了更好的做搜索引擎&#xff0c;后来Google 发表了三篇未来持续影响大数据领域的三架马车论文&#xff1a; Google Fil…

WEB安全渗透测试-pikachuDVWAsqli-labsupload-labsxss-labs靶场搭建(超详细)

目录 phpstudy下载安装 一&#xff0c;pikachu靶场搭建 1.下载pikachu 2.新建一个名为pikachu的数据库 3.pikachu数据库配置 ​编辑 4.创建网站 ​编辑 5.打开网站 6.初始化安装 二&#xff0c;DVWA靶场搭建 1.下载DVWA 2.创建一个名为dvwa的数据库 3.DVWA数据库配…

操作系统(4)---虚拟机

虚拟机又叫虚拟机管理程序或者虚拟机监控程序&#xff08;Virtual Machine Monitor/Hypervisor&#xff0c;VMM&#xff09;&#xff0c;使用虚拟化技术&#xff0c;将一台物理机器虚拟化为多台虚拟机器 (Virtual Machine,VM)&#xff0c;每个虚拟机器都可以独立运行一个操作系…

CPU,内存和硬盘之间的关系

计算机三大件&#xff1a;CPU&#xff0c;内存&#xff0c;硬盘。从运算速度来看&#xff0c;CPU>内存>固态硬盘>机械硬盘。 电脑卡顿怎么解决&#xff1f; 1、清理垃圾&#xff1b; 2、释放C盘空间&#xff0c;因为系统需要C盘空间当作虚拟内存&#xff1b; 3、增…

[SwiftUI]Text对字符串中部分字符改变颜色和字体

如图&#xff0c;需要对字符串中部分字符改变颜色和字体。 在 SwiftUI 中合并带有不同样式的文本&#xff0c;应该使用不同的 Text 实例并将它们合并起来。将实例使用 运算符合并起来&#xff0c;每个 Text 实例都保持其自己的样式设置。这种方式可以正常编译并运行&#xff0…

想找一个轻量版的MarkDown编辑器客户端,哪位推荐一下

经常需要即时写一些MarkDown文档&#xff0c;打开网页版的笔记不方便。 对比了几个&#xff0c;已收费的typora感觉还是最好的。 除此之外&#xff0c;原以为最重的VSCode&#xff0c;从打开速度、占内存等情况来说&#xff0c;居然也不相上下。 这样的对比条件下&#xff0c;…

Java Swing桌面项目打包成可执行jar

前言 最近有需求&#xff0c;将Swing项目打包为一个可执行的jar包&#xff0c;遇见了一些问题&#xff0c;参考AI助手&#xff0c;解决了遇到的问题&#xff0c;也有一些亲身实践体会&#xff0c;记录一下。开发环境IntelliJ IDEA&#xff0c;JDK8&#xff0c;用kotlin语言实现…

第七篇【传奇开心果系列】鸿蒙开发技术点案例示例:ArkUI声明式UI编程思想

传奇开心果博文系列 系列博文目录鸿蒙开发技术点案例示例系列 博文目录一、前言二、ArkUI声明式UI编程思想介绍三、以官方示例helloworld解读声明式编程四、以官方示例helloworld解读组件化开发五、以官方示例helloworld解读组件可定制六、用示例解读响应式布局七、以官方hello…

金蝶云星空--写插件不重启IIS热更新简单配置指南

云星空7.5版本&#xff0c;以简单方式配置并测试了热更新的实现方式可行&#xff0c;操作如下&#xff08;7.5外版本没试过&#xff0c;大家可试下&#xff09;&#xff1a; 1、打开WebSite\App_Data\Common.config&#xff0c;修改appSettings&#xff0c;设置IsEnablePlugIn…

InforSuiteAS中创中间件windows环境部署

版本&#xff1a;InforSuiteAS_StE_V10.0.5.2.1 环境要求&#xff1a;Java环境 DK1.8版本&#xff0c; 内存2GB或以上 &#xff0c; 硬盘空间 10GB或以上&#xff0c; 监视器 图形界面安装需要256色以上&#xff0c;字符界面安装没有色彩要求 &#xff0c;浏览器 Microsoft …