首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Array.splice重复编辑和插入之后,意外结果

Array.splice是JavaScript中的一个数组方法,用于修改数组的内容。它可以实现删除、插入和替换数组元素的功能。

具体来说,Array.splice方法接受三个参数:起始索引、删除的元素个数和要插入的元素(可选)。它会从起始索引位置开始,删除指定个数的元素,并可以在删除的位置插入新的元素。该方法会改变原始数组,并返回被删除的元素组成的新数组。

当我们对数组进行重复编辑和插入操作时,可能会遇到一些意外结果。以下是一些可能的情况和解决方法:

  1. 删除元素后索引发生变化:当我们删除数组中的元素后,后面的元素会向前移动,导致索引发生变化。如果我们在循环中使用splice方法删除元素,可能会导致循环跳过某些元素或出现意外结果。解决方法是使用倒序循环,从数组末尾开始删除元素,这样可以避免索引变化的问题。
  2. 插入元素后索引发生变化:当我们在数组中插入元素时,后面的元素会向后移动,同样会导致索引发生变化。如果我们在循环中使用splice方法插入元素,可能会导致循环处理重复元素或出现意外结果。解决方法是在插入元素后,调整循环索引的值,使其指向正确的位置。
  3. 重复编辑导致逻辑错误:如果我们在循环中多次使用splice方法对数组进行编辑,可能会导致逻辑错误。因为每次编辑都会改变数组的长度和元素位置,可能会影响后续的操作。解决方法是在循环之前先创建一个副本数组,对副本数组进行操作,这样可以避免原始数组的改变。

总之,使用Array.splice方法进行重复编辑和插入操作时,需要注意索引的变化和逻辑的正确性,避免出现意外结果。在实际开发中,可以根据具体需求灵活运用splice方法,并结合其他数组方法和编程技巧来处理数组操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

纯函数

纯函数就类似数学中的函数(用来描述输入输出之间的关系)y=fn(x) 纯函数库 我们平时用的 lodash 其实就是纯函数库。...纯函数的优点 可缓存(直接提升性能) 也就是我们平常说的函数缓存,因为纯函数对相同的输入始终有相同的结果,所以可以把纯函数的结果缓存起来,就没必要每次调用该函数都要重新执行一遍函数体的代码 可测试 纯函数让测试更方便...,不受副作用的影响 并行处理 在多线程环境下并行操作共享的内存数据很可能会出现意外情况(纯函数内的数据都是独立的),纯函数不需要访问共享的内存数据,所以在并行环境下可以任意运行纯函数 基础案例 纯函数...(0, 3)) console.log(array.splice(0, 3)) console.log(array.splice(0, 3)) // [ 1, 2, 3 ] // [ 4, 5 ] /.../ [] 函数缓存 每次调用函数,并且传入参数相同时,函数体内代码不会被执行,直接返回上一次输出的结果 const lodash = require('lodash') function getArea

24300

js入门(ES6)---声明操作变量(包含详细数组操作)

声明操作变量 声明变量 常用三种声明方式 数组 声明数组 数组对象方法 concat()拼接数组 join()数组元素插入字符串,可按照指定分隔符分隔 pop()删除末尾元素 push()添加末尾元素...为什么三四数据输出的一样,但是大小不一样呢 注意三中为 “2”,“s” 四中为 [“2”,“s”] []中无论多少,都算一个 数组下标从0开始: 也就是说arrayFour[0] = 1;...arrayFour[1] = 2; 数组对象方法 concat()拼接数组 join()数组元素插入字符串,可按照指定分隔符分隔 pop()删除末尾元素 push()添加末尾元素...返回拼接字符串,未改变原数组 join()数组元素插入字符串,可按照指定分隔符分隔 let array = new Array...想把大学期间学的东西和大家分享,大家一起进步。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!

89130
  • javascript的纯函数,纯函数怎么定义

    ,提供了对数组,数字,对象,字符串,函数等操作的一些方法 数组的slicesplice分别是纯函数不纯的函数 slice 返回数组中的指定部分,不会改变原数组 splice 对数组进行操作返回该数组...多次调用之后相同的输入输出结果不一致,splice 改变了原数组,所以splice不是纯函数 let array = [1, 2, 3, 4, 5,] // 纯函数 console.log(array.slice...(0, 3))// 1, 2, 3 console.log(array.splice(0, 3))// 4, 5 console.log(array.splice(0, 3))// [] 写一个纯函数...可测试 纯函数让测试跟方便 并行处理 在多线程环境下并行操作共享内存数据可能出现意外情况 纯函数不需要访问共享内存数据,所以在并行环境下可以任意运行纯函数(web Worker ) 副作用...,同时副作用会给程序带来安全隐患不确定性,但是副作用也不可能完全禁止,尽可能控制在可控范围内

    84430

    通过事例重温一下常见的 JS 中 15 种数组操作(备忘清单)

    上已经收录,更多往期高赞文章的分类,也整理了很多我的文档,教程资料。欢迎Star完善,大家面试可以参照考点复习,希望我们一起有点东西。 数组是 JS 中广泛使用的数据结构。...数组的映射 2.1 Array.map()方法 array.map(callback) 方法通过在每个数组项上使用callback调用结果来创建一个新数组。...11.3 array.splice() 方法 array.splice(fromIndex[, removeCount[, item1[, item2[, ...]]]])从数组中删除元素,并插入新的元素...names.splice() 可以插入新元素,而不是插入已删除的元素。...() 方法 array.splice(fromIndex[, removeCount[, item1[, item2[, ...]]]])从数组中删除元素,并插入新的元素。

    83920

    数组属性

    array.splice(index,howmany,item1,.....,itemX) 参数 描述 index 必需。规定从何处添加/删除元素。...该参数是开始插入(或)删除的数组元素的下标,必须是数字 。 howmany 可选。规定应该删除多少元素。...: 递归与迭代的区别 递归(recursion):递归常被用来描述以自相似方法重复事物的过程,在数学计算机科学中,指的是在函数定义中使用函数自身的方法。...(A调用A) 迭代(iteration):重复反馈过程的活动,每一次迭代的结果会作为下一次迭代的初始值。...(A重复调用B) 递归是一个树结构,从字面可以其理解为重复“递推”“回归”的过程,当“递推”到达底部时就会开始“回归”,其过程相当于树的深度优先遍历。

    49620

    《JavaScript权威指南》——JavaScript核心

    ,所以建议看完第一部分之后可以直接去看第三部分;第四部分:客户端JS参考,第三方的模式一样,也是第二部分的总结、提炼、讲解已经升华。...ES6新出了键控集合:SetMap,Set集合值唯一,不会重复;Map存储的为键值对。 JS还定义了另一种特殊对象——函数。...,而不使用var的可以看做是声明了一个全局属性,等同于this.xxx=yyy,属性是可以编辑的,所以是可以delete的。...八、JS的局部变量提升块级作用域 先来看代码执行的结果(也是一道经典的js面试题): var scope = "global"; function f() { console.log(scope...“-”的时候,只有减法的含义,也就是说优先调用valuleOf,所以结果为number类 十、js的继承机制 继承机制:js是通过原型链实现继承的。

    1.2K90

    《JavaScript权威指南》——JavaScript核心

    ,所以建议看完第一部分之后可以直接去看第三部分;第四部分:客户端JS参考,第三方的模式一样,也是第二部分的总结、提炼、讲解已经升华。...ES6新出了键控集合:SetMap,Set集合值唯一,不会重复;Map存储的为键值对。 JS还定义了另一种特殊对象——函数。...,而不使用var的可以看做是声明了一个全局属性,等同于this.xxx=yyy,属性是可以编辑的,所以是可以delete的。...八、JS的局部变量提升块级作用域 先来看代码执行的结果(也是一道经典的js面试题): var scope = "global"; function f() { console.log(scope...“-”的时候,只有减法的含义,也就是说优先调用valuleOf,所以结果为number类 十、js的继承机制 继承机制:js是通过原型链实现继承的。

    1K30

    用 JavaScript 实现归并排序

    最后,在空间时间复杂度方面将归并排序与其他算法进行比较。 归并排序背后的逻辑 归并排序使用分而治之的概念对给定的元素列表进行排序。...重复第 3 步单元,直到最后得到一个排好序的数组。 以数组 [4, 8, 7, 2, 11, 1, 3] 为例,让我们看一下归并排序是如何工作的: ?...之后在 left right 两个子数组中最小元素中的较小的一个,并将其添加到空数组。我们只需要检查 left right 子数组中的第一个元素,因为它们是已排好序的。...const half = array.length / 2 if(array.length < 2){ return array } const left = array.splice...另一种常见的减少归并排序运行时间的方法是在到达相对较小的子数组时(大约 7 个元素)使用插入排序。这是因为插入排序在处理小型或几乎排好序的数组时表现非常好。

    1.5K40

    lodash源码阅读-----用于过滤的方法pull

    == array) { seen.splice(fromIndex, 1) } array.splice(fromIndex, 1) } } return...array } 然后我们来看看这里,这里的意思是,当arrayvalues指向同一个数组的时候,需要克隆这个数组。...之后再通过indexof方法判定目标元素是否存在,如果不存在会直接跳出循环,如果存在的话,就通过splice方法在原数组上进行消去,splice方法接收前两个参数表示(1....删除元素的位置,2.删除元素的个数),消除后不会马上退出循环,由于indexOf是返回第一个匹配元素的位置,所以如果还存在相同元素,则会继续执行while循环,知道把同一个元素重复消去。...== array) { seen.splice(fromIndex, 1) } array.splice(fromIndex, 1) } } 然后我们来看看他的两个

    61410

    【重拾算法】01-STL

    上次认真的学习、复习算法已经是3年以前了,那时候是为了校招,在这之后算法似乎变的不太重要。我只是矜矜业业地做好前端开发该做的工作,但在业务开发越来越熟练的时候,我发现自己的视野也会变的越来越窄。...vectorC++数组的区别在与,vector不需要程序员自己去分配内存空间。 vectorqueue是连续存储,list是非连续存储(双链表)。...queue支持在队头队尾插入元素,vector只支持在队尾插入元素。 list支持高效的插入删除,但是随机访问的效率低下。...) //lastIndexOf :最后一个的索引 let pos = fruits.lastIndexOf('Banana') splice:通过索引删除某个元素 let removedItem = array.splice...(pos, 1) //从一个索引位置删除多个元素 let removedItem = array.splice(pos, n) //复制一个数组 let shallowCopy = fruits.slice

    36410

    JavaScript对象和数组

    数组提供了一组方法,使数组使用其他的数据结构一样。数组可以表现的像栈一样,可以限制插入删除。栈是一种后进先出的数据结构,最新添加的项最早被移除。插入删除都发生在栈的顶部。...1,3,5,7,9,11]; array.sort(); console.log(array.toString());//输出1,11,3,5,7,9 通过上面的代码,我们发现sort方法的排序有时候并不是我们想要的结果...splice方法可以向数组的中部插入元素,splice可以实现数组的插入、删除替换。删除需要指定两个参数,要删除第一项的位置,要删除的项数。...splice插入方法至少传递三个参数,第一要插入元素的位置,第二个要删除的项数(0),第三个参数要插入的元素,如果要插入多项,可以有第四个参数。。。。...arrays=array.splice(1,1,"yellow");//["red","yellow","blue","white","black"] 上面的代码讲述了splice方法的删除、插入、替换方法的使用

    1.6K70
    领券