精华内容
下载资源
问答
  • 主要介绍了浅谈js数组splice删除某个元素爬坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 本文实例讲述了JS数组splice操作。分享给大家供大家参考,具体如下: node2:/var/www/html/js#cat h23.js [removed] var narr=['a','b','c','d','e']; console.log(narr); for (var j=0;j<narr>'+narr[j]); }; ...
  • 数组splice()方法

    2018-12-28 04:48:45
    var arr = new Array(1, 2, 3, 4, 5); //初始化数字集合 var delete_number = 3;...//遍历数组 for(var i=0; i<arr.length; i++){ if(arr[i] === delete_number){ //如果找到要被删除的数字所在的数组下标 var ...

    var arr = new Array(1, 2, 3, 4, 5);     //初始化数字集合
    var delete_number = 3;    //要被删除的数字
     
    //遍历数组
    for(var i=0; i<arr.length; i++){
        if(arr[i] === delete_number){   //如果找到要被删除的数字所在的数组下标
            var num = arr.splice( i, 1 );   //从i位置开始删除1个数字
            console.log("成功删除 "+num);    //输出被删除的数字
        }
        else{
            console.log(arr[i]+" 未被删除");    //如果i下标的数组元素不是需要被删除的数字,就输出数字
        }
    }  复制代码
     输出结果:


    数字3果然被删掉了!!!不过仔细一看,咦,4呢????数字4没有被循环遍历到。。。

    splice 是直接操作并修改数组的,所以当找到数字3时在循环中的 i 下标是2,而当删除数字3后,数组下标 i 位置中保存的数字变为了数字4,然后到了下一个循环 i 下标为3时,数组下标 i 位置中保存的数字是5,所以跳过了数字4,于是调试信息中没有数字4.。。。原理就是这样子

    修改代码:

    if(arr[i] === delete_number){   //如果找到要被删除的数字所在的数组下标
        var num = arr.splice( i, 1 );   //从i位置开始删除1个数字
        console.log("成功删除 "+num);    //输出被删除的数字
        
        i = i-1;    //解决方案
    }  复制代码

     还有一种方法可以直接避免这个问题:

    倒序循环遍历数组


    转载于:https://juejin.im/post/5c25a9966fb9a049b82a8726

    展开全文
  • 数组splice细节问题

    2018-11-12 15:30:03
    splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。 注释:该方法会改变原始数组。 语法 arrayObject.splice(index,howmany,item1,.....,itemX) 参数 描述 index 必需。整数,规定添加/...

    今天使用 splice又遇到一个没注意到的小坑。先看下它的定义与用法

    定义和用法

    splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。

    注释:该方法会改变原始数组。

    语法

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

    返回值

    类型描述
    Array包含被删除项目的新数组,如果有的话。

    说明

    splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。

    如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。

     

     

    以前都是匹配到某个数组里面的一项,然后用 arr.splice(i,1)删除掉那项数组元素,然后返回新的数组。例如:

     this.tableData.forEach(item => {
                      item.value.forEach((val,index) => {
                        if(val.id==id){
                          item.value.splice(index,1)
                        }
                      })
                    });

    这样写并没有什么问题,删除掉数组中那个ID相等的。但是在今天的例子中有所不同。如下:

     var arr=[1]
      for(var i=0;i<arr.length;i++){
        console.log(11111)
        arr.splice(i,1)
      }
      console.log(arr)

    这个也还正常,数组中只有一项,删掉以后变为空的数组。

     

    var arr=[1,2]
      for(var i=0;i<arr.length;i++){
        console.log(11111)
        arr.splice(i,1)
      }
      console.log(arr)

    但是这个就有坑了,数组中只有两项的时候,这样并没有和我所想的一样去执行两次,输出两次console.log(11111),并且数组为空。 仔细想了下,应该是在第一次循环的时候,arr.splice(i,1)截取完成后,arr的长度就已经变成了1,而不再是2了。所以第二次循环并没有去执行。且原先的第二个数组也保留了下来。

    也就是说使用arr.splice(i,1)循环数组时,循环次数会比正常的-1次。

    所以在使用arr.splice(i,1) 并且再循环中使用时,一定住注意length的变化。

    其实单纯使用splice并不会有问题,但是在循环中使用的话,就必须考虑到length的变化。

    最后加了一段if(item.value.length==1){
                      item.value.pop();
                    }

    判断来完成的循环。 

    当然完全类似这种需求我就不建议使用splice去做了,不如把符合条件的对象都push到一个新数组里,去操作那个新数组。逻辑会清晰很多。

     this.tableData.forEach(item => {
                    let checkArr=[];
                    //写一个新数组,去记录没有选中的,然后赋值给item.value
                    item.value.forEach((val,index) => {
                      if(!val.checked){
                        checkArr.push(val);
                      }
                    });
                    item.value=checkArr;
                  });
    展开全文
  • js数组splice删除某个元素爬坑

    千次阅读 2019-06-12 10:06:21
    // splice:返回从原始数组中删除的项(如果没有任何删除,则返回空数组) // 当指定2个参数时,表示删除 // 当指定3个参数,且第2个参数为0时表示插入 // 当指定3个参数,且第2个参数为1时表示替换 本次就拿...

    先来看下几个概念:

    // splice:返回从原始数组中删除的项(如果没有任何删除,则返回空数组)
    	    // 当指定2个参数时,表示删除
    	    // 当指定3个参数,且第2个参数为0时表示插入
    	    // 当指定3个参数,且第2个参数为1时表示替换

    本次就拿删除举例,本身我们想删除数组中的某个指定元素,我们需要知道它所在数组中的下标,我们可以用 数组.indexOf获取它所在的下标,然后拿splice删除这个元素。

    本身是没问题

    代码如下:

    var arr = ["张三","李四","王五","赵六"];
    
    // 删除王五
    arr.splice(arr.indexOf("王五"),1);
    

    但是。。。。。问题就来了。

    如果放到for循环中,比如循环数组,当某个条件成立的时候,我们需要删除某个指定的元素。

    但是循环中,i每次都是+1的,但是我们删除某个元素后,下标就变了,相应的位置发生变化,i的值加一后,就会跳过下一个元素。

    坑啊。。。

    所以,在删除某个元素的时候,我们手动把 i的值再减一,这样就会避免出现跳过某个元素的问题。

    例如:循环数组,当 DasOperation  属性值等于 没变 的时候,从数组中删除这条数据,然后i-1

    // 删除没有变化的,不传递到后台
    for (let i = 0; i < this.CurrJobData.Content.length; i += 1) {
        if (this.CurrJobData.Content[i].DasOperation === '没变') {
           this.CurrJobData.Content.splice(this.CurrJobData.Content.indexOf(this.CurrJobData.Content[i]), 1);
            i -= 1;// 必须对i减去1,否则后面的一个元素会被跳过去
        }
    }

    好了,为避免更多小伙伴遇坑,贴出来,希望有帮助。

    如有问题,请指出,接受批评。

    个人微信公众号:

    展开全文
  • WTF!! Vue数组splice方法无法正常工作

    千次阅读 2018-12-13 11:08:48
    当函数执行到this.agents.splice()时,我设置了断点。...然后我打开Vue Devtools, 然后刷新了一下,发现那个数组的第一项还是存在的 removeOneAgentByIndex: function (index) { this.agents.splice(index, 1)...

    当函数执行到this.agents.splice()时,我设置了断点。发现传参index是0,但是页面上的列表项对应的第一行数据没有被删除,

    WTF!!! 这是什么鬼!然后我打开Vue Devtools, 然后刷新了一下,发现那个数组的第一项还是存在的

    
    removeOneAgentByIndex: function (index) {
      this.agents.splice(index, 1)
    }
    

    然后我就谷歌了一下,发现这个splice not working properly my object list VueJs, 大概意思是v-for的时候最好给列表项绑定:key=。然后我是试了这个方法,发现没啥作用。

    最终我决定,单步调试,如果我发现该问题出在Vue自身,那我就该抛弃Vue, 学习React了

    单步调试中出现一个异常的情况,removeOneAgentByIndex是被A函数调用的,A函数由websocket事件驱动。正常情况下应该触发一次的事件,服务端却发送了两次到客户端。由于事件重复,第一次执行A删除时,实际上removeOneAgentByIndex是执行成功了,但是重复的第二个事件到来时,A函数又往agents数组中添加了一项。导致看起来,removeOneAgentByIndex函数执行起来似乎没有设么作用。而且这两个重复的事件是在几乎是在同一时间发送到客户端,所以我几乎花了将近一个小时去解决这个bug。引起这个bug的原因是事件重复,所以我在前端代码中加入事件去重功能,最终解决这个问题。

    我记得之前看过一篇文章,一个开发者调通过回调函数计费,回调函数是由事件触发,但是没想到有时候事件会重发,导致重复计费。后来这名开发者在自己的代码中加入事件去重的功能,最终解决了这个问题。

    事后总结:我觉得我不该怀疑Vue这种库出现了问题,但是我又不禁去怀疑。

    通过这个bug, 我也学到了第二方法,可以删除Vue数组中的某一项,参考下面代码。

    
    // Only in 2.2.0+: Also works with Array + index.
    removeOneAgentByIndex: function (index) {
      this.$delete(this.agents, index)
    }
    

    另外Vue devtools有时候并不会实时的观测到组件属性的变化,即使点了Refresh按钮。如果点了Refresh按钮还不行,那建议你重新打开谷歌浏览器的devtools面板。

    最后for循环是非常建议对列表项绑定:key, 这个key应当是固定且唯一的,可以是uuid,或者id。但是千万不要绑定数组的index, 否则就会出现Vue项目中v-for数组删除第n项元素产生渲染错误

    
    // very bad
    &lt;li v-for="(item,index) in list" :key="index"&gt;&lt;/li&gt;
    
    
    // very good
    &lt;li v-for="(item,index) in list" :key="item.id"&gt;&lt;/li&gt;
    

    原文地址:https://segmentfault.com/a/1190000017356114

    展开全文
  • // splice数组方法 // 格式:数组.splice(删除目标在对应数组的索引,删除的数量,要添加的数据) // (索引是正值从左到右是从0开始计算起,索引是负值则从右到左-1开始计算起) // 例子: vararr=["a","b","c...
  • 一看到这个我的思路就是点击添加标签,把新增的节点push到自己定义的数组里,然后渲染出来,点击删除按钮,用splice方法从数组中删除掉当前的节点(很简单,很明确的思路嘛,但是却事与愿违) <div ...
  • array.splice(start[, deleteCount[, item1[, item2[, ...]]]]) start 指定修改的开始位置(从0计数)。如果超出了数组的长度,则从数组末尾开始添加内容;如果是负值,则表示从数组末位开始的第几位(从-1计数,这...
  • 数组splice方法

    2018-02-10 09:54:00
    js数组 splice 方法 【功能】 splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。 1.添加  let arr = [1,2,3]; console.log(arr);//[1, 2, 3] Array.prototype.splice.call(arr,1,0,'4'); ...
  • 数组splice方法—去重

    千次阅读 2017-06-23 14:40:54
    <script>var arr = [ 'TM...arr.splice( 0 , 0, 'aaaaaa'); // 第一个参数: 规定从何处添加/删除元素; 第二个参数:规定应该删除多少元素。arr.splice( 0, 2, '莫涛 or 钟毅' ); //替换 ['莫涛 or 钟毅','张森', '杜鹏'
  • splice() 方法恐怕是最强大的数组方法了,它有很多中用法,splice() 方法的主要用途是向数组的中部插入项,使用这个方法主要有下面三种规则: 1. 删除 删除操作:可以删除任意数量的项,只需指定两个参数: 要删除的第一项...
  • // 格式:数组.splice(删除目标在对应数组的索引,删除的数量,要添加的数据) // (索引是正值从左到右是从0开始计算起,索引是负值则从右到左-1开始计算起) // 例子: var arr =[ "a" , "b" , "c" , "d" , "e" ...
  • 改了几个bug,然后也没什么其他事情,就想着封装个方法,实现和数组splice同样的功能。 相信开发过程中,经常会用到有关数组的方法,找到最适合场景的方法,不但可以提高我们的开发效率,还让我们的代码既干净又...
  • 数组方法 slice(剪裁方法(返回新数组,不影响原来的数组) (1)无参:如果不传入参数的情况下, silce()方法返回完整的数组 (2)1个参数:在只有一个参数的情况下,slice()方法返回从该参数指定位置开始到当前...
  • 数组删除splice方法

    2018-07-04 13:00:00
    在js数组的操作有很多对于splice方法个人简介 删除数组当中的某一项可以直接用splice这个方法可以改变原数组返回删除的元素 splice有三个参数 第一个参数是 必需。整数,规定添加/删除项目的位置,使用负数可从...
  • 开发中,经常会用到js的Array数组的各种迭代函数map(),filter(),some(),every(),forEach(),find() findIndex(),splice(),也是在ES6中新增一些遍历函数。同样是不是也是一道面试题,说说ES6新增的一些新特性?...
  • 数组splice用法

    2016-12-13 00:31:03
    //1.splice的第一种用法,splice(删除的起点,个数);0指第一个元素,1指第二个元素 //arr.splice(0,2) ; //alert(arr); //2.splice的第二种用法,splice(删除的起点,个数,'a','b','c'); ...
  • 1.splice()属于数组对象的方法,若对象使用splice则会报错: {a:1}.splice 运行结果:Uncaught SyntaxError: Unexpected token . 2.splice会改变原数组(slice不会): var arr = [0,1,2,3]; arr.splice(2,1); ...
  • js数组中的splice()方法

    2020-06-18 11:38:15
    js数组中的splice()方法 splice方法用于删除、替换、添加数组中的元素,由于参数较多,使用起来容易混淆 var list = []; list.push(1); list.push(2); list.push(3); console.log(list); // [1, 2, 3] // 删除 list...
  • splice()方法splice(),主要用途是向数组中部插入项。 删除: 可以删除任意数量的项 只需指定2个参数:要删除的第一项的位置和要删除的项数。 插入:可以向指定的位置插入任意数量的项 只需提供三个参数:起始位置...
  • 数组.splice(位置,删几个) 删除并添加:删几个位0时表示不删除。 删除第二个元素,并添加一个新元素来替代被删除的元素: 数组.splice(位置,删几个,添加的) 示例: <script type="text/javascript...
  • 不知是夜深了脑子不转了还是啥,简单的数组插入居然出现了这么一个问题,求醒脑!!!!! var items = [2,4,6,8]; items.splice(items.length,0,10); console.log(items); //[2,4,6,8,10] ``` ``` 问题来了...
  • 相信对很多学习JavaScript语言的人来说,都会经常搞不清slice和splice这两个方法。它们虽然名称相似,但是功能却...所以这篇文章就给大家详细整理了关于JavaScript中数组slice和splice的对比,有需要的可以参考学习。
  • 1、删除数组指定的一个元素 a.splice(n, 1); // n是要删除的对象的下标 1表示只删除一个 删除指定的多个 a.splice(n,m) // n是要删除的对象的下标 m表示从下标为n的开始,连续删除m个(m大于a.length也无妨) 2、...
  • JS数组操作方法 splice()

    千次阅读 2019-04-02 20:23:58
    splice()主要用途是向数组中部插入项。 删除: splice(0,2)删除前两项 插入:splice(2,0,"red","green") 从位置2插入red, green 替换:splice(2,1,"red","green")删除位置2一项,然后从位置2插入red,green...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,477
精华内容 32,190
关键字:

数组splice