当前位置: 首页 > news >正文

js中的 slice、splice、split、substring、substr

数组中的slice和splice

slice:截取数组
splice:删除、插入、替换数组

slice:

  • 若只有一个参数表示从当前位置截取到最后一位
  • 若有两个参数表示从第一个参数开始截取到第二个参数(不包括第二个参数的位置)
  • 若只有一个参数且是负数表示从倒数位置开始截取到最后一位
var aaa = [1, 2, 3, 4, 5]
var bbb = aaa.slice(2)
console.log(bbb)  // [3,4,5]
var ccc = aaa.slice(2, 3)
console.log(ccc)  // [3]
var ddd = aaa.slice(-2)
console.log(ddd)  // [4,5] 从倒数第二位开始截取到最后一位
var eee = aaa.slice(-2, 6)
console.log(eee)  // [4,5] 从倒数第二位开始截取到第6位 由于其长度小于6位 所以默认截取到最后
var fff = aaa.slice(-4, 6) 从倒数第四位开始截取到第6位 由于其长度小于6位 所以默认截取到最后
console.log(fff)  // [2,3,4,5]
var fff2 = aaa.slice(-4, 3) 从倒数第四位开始截取到第3位 不包含第三位 即截取到第二位
console.log(fff2)  // [2,3] 
var ggg = aaa.slice(2, -6)  
console.log(ggg)  // [] 从索引为2开始截取  截取长度为0
var hhh = aaa.slice(-2, -6)
console.log(hhh)  // [] 从索引为2开始截取  截取长度为0 只要是负数都是0
console.log(aaa)  // [1,2,3,4,5]

说明:

  • slice截取后,返回一个新数组,不会影响原来数组
  • slice传入一个负数,表示从倒数的位置开始截取 截取的第二个参数是从截取之后的位置往后开始计算的。截取的第二个参数不能是负数 否则就返回的是一个空数组

splice:

  • 一个参数:若这个参数是负数,表示从倒数项开始计算删除的位置到最后一项
  • 一个参数:表示要删除的项的起始位置到最后一项
  • 两个参数:一个参数表示要删除的起始位置,第二个参数表示要删除的项数
  • 三个参数:第一个参数要删除的起始位置,第二个参数表示要删除的项数,第三个删除表示要插入的项,若第二个参数是为0 表示没有删除直接就是插入,若第二个参数不是0,则表示要删除某一些项就是替换,若后面还有其他的参数就是要插入或要替换的项目
var aaa = [1, 2, 3, 4, 5]
var bbb = aaa.splice(-2)
console.log(bbb)  // [4,5] 从倒数第二位开始删除  直到最后一项
console.log(aaa) // [1,2,3]var aaa1 = [1, 2, 3, 4, 5]
var bbb1 = aaa1.splice(2) 
console.log(bbb1)  // [3,4,5] 从第二位开始删除  直到最后一项
console.log(aaa1) // [1,2]var aaa11 = [1, 2, 3, 4, 5]
var bbb11 = aaa11.splice(2, 2)
console.log(bbb11)  // [3,4]
console.log(aaa11) // [1,2,5]var aaa22 = [1, 2, 3, 4, 5]
var bbb22 = aaa22.splice(2, 0, "22", "23")
console.log(bbb22)  // []
console.log(aaa22) // [1,2,"22","33",3,4,5]var aaa33 = [1, 2, 3, 4, 5]
var bbb33 = aaa33.splice(2, 2, "11", "22")
console.log(bbb33)  // [3,4]
console.log(aaa33) // [1,2,"11","22",5]

说明:

  • splice之后的返回的删除之后的数组,会影响原数组,原数组就是操作之后的数组
  • splice当删除的项是0的时候,要替换的位置就是当前索引之前的位置,而不是当前索引之后的位置

字符串中的slice和split
slice方法和数组中的slice方法一致

split:分割:将字符串分割成数组

  • 只有一个参数,表示要分割的位置
  • 若是什么都没有传或者字符串中没有对应的字符 则表示不分割
  • 若传入的是一个空字符串 表示分割每一个字符串
  • 若传入的是一个空格 表示以空格的位置进行分割
var a = "hello xiaoming"
console.log(a.split())      // "hello xiaoming"
console.log(a.split(""))    // ["h","e","l","l","o"," ","x","i","a","o","m","i","n","g"]
console.log(a.split(" "))   // ["hello","xiaoming"] 
console.log(a.split("o"))   // ["hell"," xia","ming"]
console.log(a.split("o 0")) // "hello xiaoming"

说明:

  • 分割位置定了以后,被分割的字符串将被丢掉

substring和str

这两个都是截取字符串长度的 第一个参数均表示开始截取的位置 第二个参数含义不一样
substring表示要截取到位置的索引,不包含最后的位置
substr表示要截取的长度

var b = "hello xiaoming";
console.log(b.substring(0, 7))    // "hello x"
console.log(b.substring(1, 2))    // "e"
console.log(b.substring(2, 1))    // "e"
console.log(b.substring(-1, 2))   // "he"  负数作为0处理 等价于0-2
console.log(b.substring(-4, 5))   // "hello"  负数作为0处理 等价于0-5
console.log(b.substring(4, -5))   // "hell"  负数作为0处理 等价于4-0 然后调换位置变为0-4
console.log(b.substring(-4, -5))   //       负数作为0处理 等价于0-0  无任何截取console.log("---------")console.log(b.substr(0, 7))       // "hello x"
console.log(b.substr(1, 2))       // "el"
console.log(b.substr(2, 1))       // "l"
console.log(b.substr(-1, 2))      // "g"  从倒数位置开始截取 因为是最后一位  所以只有一个g
console.log(b.substr(-4, 5))      // "ming"  从倒数位置开始截取 截取5位 因为长度不够 所以就只有4位
console.log(b.substr(-4, 3))      // "min"  从倒数位置开始截取 截取3位 
console.log(b.substr(4, -5))      //    第二个参数负数表示0  表示无任何截取
console.log(b.substr(-4, -5))     //    第二个参数负数表示0  表示无任何截取

说明:
substring:

  • 若第二项参数小于第一项参数,则自动调换顺序
  • 若第一项或第二项是负数则从0开始 若调换从0开始后顺序是从大到小的再调换

substr:

  • 第一个参数是负数表示从末尾开始数
  • 第二个参数表示负数表示0

总结:

slice第一个参数是负数,表示从倒数位置开始计算截取位置
slice第二个参数是负数,表示不截取 返回是一个空数组

splice第一个参数是负数,表示从倒数位置开始计算删除的位置
splice第二个参数是负数,表示要删除的项为空 返回一个空数组
splice第三个参数是负数,表示要插入的元素就是负数

substring只要参数是负数都作为0处理
substring若第二参数小于第一个参数则自动调换位置

substr第一个参数是负数,表示从倒数位置开始计算截取
substr第二个参数是负数,则直接作为0处理

http://www.dtcms.com/a/318274.html

相关文章:

  • 面试题:使用class类来写工个五子棋
  • spring-dubbo
  • Post-train 入门(1):SFT / DPO / Online RL 概念理解和分类
  • C++与C语言实现Stack的对比分析
  • sqli-labs通关笔记-第34关POST宽字符注入(单引号闭合 手工注入+脚本注入两种方法)
  • Verilog 仿真问题:打拍失败
  • FPGA学习笔记——VGA简介
  • Excel单元格设置下拉框、选项背景
  • 20250806给PRO-RK3566开发板在Buildroot系统下扩大rootfs分区2GB
  • 实习文档背诵
  • 解决Cloudflare人机验证加载异常:从常规排查到hosts配置优化
  • 【软件介绍】RVC本地部署使用方法
  • Linux基础命令详解手册
  • css怪异模式(Quirks Mode)和标准模式(Standards Mode)最明显的区别
  • 【CVPR2025】Mr.DETR: 通过多路线训练机制改进DETR,并进行“one to one”和“one to many”的预测
  • pytorch安装
  • ​​MCU程序的存储方式与存储区域大小要求​
  • c++ template in .h and .cpp
  • RocketMQ和Kafka一样有重平衡的问题吗?
  • 机器学习——朴素贝叶斯
  • Java面试题和答案大全
  • Web 端 AI 图像生成技术的应用与创新:虚拟背景与创意图像合成
  • Session 和 JWT(JSON Web Token)
  • [AI]从零开始的SDXL LORA训练教程
  • 机器视觉的智能手表贴合应用
  • Android 之 ViewBinding 实现更安全、高效的视图绑定
  • envFrom 是一个 列表类型字段bug
  • W3D引擎游戏开发----从入门到精通【22】
  • 《聚氨酯垫性能优化在超薄晶圆研磨中对 TTV 的保障技术》
  • 小实验--震动点灯