首页 > 编程语言 >JavaScript学习--splice()函数入门与精通

JavaScript学习--splice()函数入门与精通

时间:2024-03-13 11:23:41浏览次数:31  
标签:index arrBack 删除 -- JavaScript write splice array

一、splice入门

splice方法:通过删除(两个参数)或替换现有元素(三个参数)或者原地添加新的元素(三个参数)来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。

参数:
index —— 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置(从1开始)。
howmany —— 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, …, itemX —— 可选。向数组添加的新项目。

返回值:Array —— 包含被删除项目的新数组,如果有的话。

1、只有一个参数

splice(index) ——> 从index的位置开始,删除之后的所有元素(包括第index个)

let array = [0,1,2,3,4,5,6]
document.write("原数组为:"+ array + "<br />")
let arrBack = array.splice(2)
document.write("array:",array + "<br />")
document.write("arrBack:",arrBack)

结果:

原数组为:0,1,2,3,4,5,6
array:0,1
arrBack:2,3,4,5,6

若 index < 0 , 则删除最后倒数第index个元素,从1开始数。

let array = [0,1,2,3,4,5,6]
document.write("原数组为:"+ array + "<br />")
let arrBack = array.splice(-3)
document.write("array:",array + "<br />")
document.write("arrBack:",arrBack)

结果:

原数组为:0,1,2,3,4,5,6
array:0,1,2,3
arrBack:4,5,6

2、两个参数(指定索引删除)

splice(index,howmany) ——> 删除从index位置开始的数,howmany为删除的个数。若 howmany 小于等于 0,则不删除。

splice(2,1)表示删除从index=2(即第三个元素)开始,删除一个,即第三个元素。

let array = [0,1,2,3,4,5,6]
document.write("原数组为:"+ array + "<br />")
let arrBack = array.splice(2,1)
document.write("array:",array + "<br />")
document.write("arrBack:",arrBack)

结果:

原数组为:0,1,2,3,4,5,6
array:0,1,3,4,5,6
arrBack:2

splice(2,0)表示删除从index=2(即第三个元素)开始,删除0个,即不删除

let array = [0,1,2,3,4,5,6]
document.write("原数组为:"+ array + "<br />")
let arrBack = array.splice(2,0)
document.write("array:",array + "<br />")
document.write("arrBack:",arrBack)

结果:

原数组为:0,1,2,3,4,5,6
array:0,1,2,3,4,5,6
arrBack:

 

3、大于等于3个元素(新对象替换老对象)

splice(index ,howmany , item1, …, itemX )

当index >0时
(1)、howmany 为0时,不删除只添加 —— 在index位置前添加item1, …, itemX

(2)、howmany > 0时,删除且添加 —— 删除从index位置开始的数,howmany为删除的个数,并且在index位置添加item1, …, itemX

当index <0时,最后一个数为 -1,依次倒数第二个数为-2,...

(1)、howmany 为0时,不删除只添加 —— 在-index位置前添加item1, …, itemX

(2)、howmany > 0时,删除且添加 —— 删除从-index位置开始的数,howmany为删除的个数,并且在-index位置前(相当于往后 -2前是 -1)添加item1, …, itemX的数

splice(2,0,8,9)表示删除从index=2(即第三个元素)开始,删除0个,即不删除;并在第三个元素前添加8,9

let array = [0,1,2,3,4,5,6]
document.write("原数组为:"+array + "<br />")
let arrBack  = array.splice(2,0,8,9)
document.write("array:",array + "<br />")
document.write("arrBack:",arrBack)

结果:

原数组为:0,1,2,3,4,5,6
array:0,1,8,9,2,3,4,5,6
arrBack:

splice(5,3,8,9)表示删除从index=5(即第六个元素)开始,删除3个(包含第六个),后面只剩两个,全部删除;并在第六个元素位置添加8,9

let array = [0,1,2,3,4,5,6]
document.write("原数组为:"+array + "<br />")
let arrBack  = array.splice(5,3,8,9)
document.write("array:",array + "<br />")
document.write("arrBack:",arrBack)

结果:

原数组为:0,1,2,3,4,5,6
array:0,1,2,3,4,8,9
arrBack:5,6

splice(-2,0,8,9)表示删除从index=-2(即倒数第二个元素)开始,删除0个,即不删除;并在倒数第二个元素前添加8,9

let array = [0,1,2,3,4,5,6]
document.write("原数组为:"+array + "<br />")
let arrBack  = array.splice(-2,0,8,9)
document.write("array:",array + "<br />")
document.write("arrBack:",arrBack)

结果:

原数组为:0,1,2,3,4,5,6
array:0,1,2,3,4,8,9,5,6
arrBack:

splice(-2,3,8,9)表示删除从index=-2(即倒数第二个元素)开始,删除3个,即5,6(只有两个);并在倒数第二个元素前添加8,9

let array = [0,1,2,3,4,5,6]
document.write("原数组为:"+array + "<br />")
let arrBack  = array.splice(-2,3,8,9)
document.write("array:",array + "<br />")
document.write("arrBack:",arrBack)

结果:

原数组为:0,1,2,3,4,5,6
array:0,1,2,3,4,8,9
arrBack:5,6

二、项目实战

根据索引删除

1、当勾选复选框,触发change事件,执行函数

复制代码
handleItemChange(e){
      // 如果是添加勾选,则执行以下代码
      if(e.detail.value.length > 0){
        var itemList = e.detail.value
        itemList.forEach(item =>{
          var row = item.split(',')
          var list = []
          const obj = {name: row[1],value: row[0]}
          list.push(obj)
          this.setData({
            ids: this.data.ids.concat(row[0]),
            names: this.data.names.concat(row[1]),
            tagList: [...this.data.tagList,...list]
          })
          this.data.dataList.forEach(item =>{
            if(item.id == row[0]){
              item.checked = true
            }
          })
        })
      }else{  // 如果是去掉勾选,则执行以下代码
        let index = this.data.ids.findIndex(item =>e.currentTarget.dataset.id == item)
        this.data.ids.splice(index, 1);
        this.data.names.splice(index,1)
        this.data.tagList.splice(index,1)
      }
    },

2、removeTags方法如下:即将tags中的对象从数组中删除,将auditorIds中的userId也删除

removeTags(tag) {
          this.tags.splice(this.tags.indexOf(tag), 1);
          this.auditorIds.splice(this.auditorIds.indexOf(tag.id),1);
        },

3、删除文件

fileRemove(val, fileList) {
        let isDelete = false
        if (val.id !== null && val.id !== 0) {
          this.$confirm('此操作将删除文件, 是否继续?', '提示', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning'
          }).then(() => {
            isDelete  = true
            nfsFileApi.deleteFile(val.id).then(response => {
              if (response.success) {
                this.files = fileList;
                for (var i = 0; i < this.files.length; i++) {
                  var obj = this.files[i];
                  if (obj.id != null && obj.id !== 0 && obj.id === val.id) {
                    this.files.splice(i, 1);
                  }
                }
              } else {
                this.$message.error('删除文件失败');
              }
            })
          }).catch(() => {
            isDelete = false;
          })
          return isDelete
        } else {
          this.files = fileList;
          this.files.splice(this.files.indexOf(val), 1);
        }
      },

新对象替换老对象

1、往来单位关联平台企业

先替换企业,再更新后台的关联企业

updateRalationEnterPrise(row) {
      this.relationEntity.splice(0, 1, row); // 0表示指定在index为0处删除,1表示要删除的数量,row表示要添加到数组中的新项目。
      this.entity.relPtsEntityId = row.entityId;  // 将entity_id复制给relPtsEntityId,在后台更新relPtsEntityId字段
      updateAgent(this.entity).then(res => {
        if (res.success) {
          this.$message.success("关联成功")
        }
      })

    },

2、后台通过websocket给前端发送消息,消息的内容为id,前端收到消息后将该id的样式改为红色即可。

methods: {
      //初始化
      initWs() {
        if (typeof (WebSocket) === "undefined") {
          alert("您的浏览器不支持socket")
        } else {
          // 实例化socket 111是固定的用户id,正式环境直接获取当前登录用户id
          // this.socket = new WebSocket(this.global.wsUrl + '111')
          // this.global.setWs(this.socket)
          this.socket = new WebSocket("ws://localhost:8888/webSocket/" + '111');
          // 监听socket连接
          this.socket.onopen = () => {
            console.log("socket连接成功")
          }
          // 监听socket错误信息
          this.socket.onerror = () => {
            console.error("连接错误")
          }
          //监听socket消息
          this.socket.onmessage = (msg) => {
            console.log(msg)
            //处理消息
            var serverMsg = msg.data;
            var t_id = parseInt(serverMsg)    //服务端发过来的消息,ID,string需转化为int类型才能比较
            for (var i = 0; i < this.list.length; i++) {
              var item = this.list[i];
              if(item.id == t_id){
                item.state = -1; // 修改原来对象中的state属性值为-1,改变颜色
                this.list.splice(i,1,item) // state值为-1的新对象替换旧对象
                break;
              }
            }
          }
          // 监听socket关闭信息
          this.socket.onclose = (e) => {
            console.error("socket已经关闭")
            console.error(e)
          }
        }
      },
    },

效果:

 

标签:index,arrBack,删除,--,JavaScript,write,splice,array
From: https://www.cnblogs.com/zwh0910/p/18069914

相关文章

  • 【习题】随机变量与分布函数
    [T0301]设随机变量\(\xi\)取值于\([0,1]\),若\(P\{x\le\xi<y\}\)只与长度\(y-x\)有关(对一切\(0\lex\ley\le1\)).试证\(\xi\simU[0,1]\).证不妨设\(P\{x\le\xi<y\}=f(y-x)\).令\(x=0\),则有\(P\{0\le\xi<y\}=f(y)\).注意到对\(\for......
  • go语言入门基础知识
    目录序安装常用命令一、数据类型1.布尔值2.字符串字符串遍历3.字符4.整型位运算5.浮点6.复数7.map二、常量、变量1.变量2.常量3.预定义常量iota4.枚举三、流程控制1.条件语句2.选择语句3.循环语句4.跳转语句四、函数不定参数匿名函数与闭包make()函数new函数闭包defer五、数组1.......
  • 数据湖&湖仓一体简介
     1简介术语数据库数据库是“按照数据结构来组织、存储和管理数据的仓库”。广义上的数据库,在20世纪60年代已经在计算机中应用了。但这个阶段的数据库结构主要是层次或网状的,且数据和程序之间具备非常强的依赖性,应用较为有限。现在通常所说的数据库指的是关系型数据库。......
  • MSSQL行转列、列转行
    行转列SELECT*FROMstudentPIVOT(SUM(score)FORsubjectIN(语文,数学,英语))ASPivotedData;   列转行  SELECT*FROMstudent1UNPIVOT(scoreFORsubjectIN("语文","数学","英语"))ASPivotedDa ......
  • 万字带你了解ChatGLM
    本文分享自华为云社区《【云驻共创】华为云之昇思MindSpore大模型专题(第二期)-第一课:ChatGLM》,作者:愚公搬代码。前言1.昇思MindSpore昇思MindSpore是华为公司推出的一款全场景AI计算框架。它提供了自动微分、分布式训练和推理、模型部署等功能,支持多种硬件平台,包括CPU、GPU和As......
  • python_base
    python基础输入输出print(self,*args,sep='',end='\n',file=None)变量python中同一个字符串重复使用,分配的内存地址相同。del删除变量python可以直接交换变量的值,实际是交换变量的地址。多个变量赋相同值对应相同地址,修改其中一个变量内容不影响其它变量的值。标......
  • 编译GreatSQL with RocksDB引擎
    GreatSQL里也能用上RocksDB引擎1.前言RocksDB是基于Facebook开源的一种支持事务的、高度可压缩、高性能的MyRocks存储引擎,特别适用于高度压缩和大容量的数据。以下是一些关键特点:高性能:LSM树结构使得RocksDB在写入密集型负载下表现卓越。它能够处理大量的写入操作,并且......
  • 56_packer的使用
    JSONTemplateStructure模板是一个JSON对象,它有一组配置Packer各个组件的键。下面列出了模板中可用的密钥。每把钥匙都要注明是否需要。builders(必需)是一个或多个对象的数组,用于定义将用于为此模板创建机器映像的构建器,并配置这些构建器中的每一个。有关如何定义和配置生成器......
  • 55_创建私人服务
    脚本模板!/bin/bashNOW_SIZE=REQUIRE_SIZE=2500LOG_FILE=/var/log/mem.logSERVICE_STATUS=0functioncheck_mem(){NOW_SIZE=$(free-m|awk'/Mem/{print$4}')if[[$NOW_SIZE-le$REQUIRE_SIZE]];thenecho"警告:$(date+%F_%H:%m:%S)内存低于2.5G,......
  • L1-049 天梯赛座位分配
    测试点1提交了好多次,都没过去。找网上那些测试点输出结果是一样的,但就是过不去。然后认真思考了一番,自己可能没理解好这道题。我的理解错误在于,认为在最大的时候,号码应该是这一队的上一个人号码加上2。实际上,只有上一个号码和他在同一队的时候,才这么干。如果不是同一队,依旧是加......