JavaScript中splice与slice的区别
splice与slice是数组中的两个常用方法,但是很多初学者很容易将二者混淆。
slice的操作不影响原数组。会返回所选择的元素。
splice往数组中指定位置添加或删除元素,会影响原数组。返回被删除的元素。
slice()
可从已有的数组中返回选定的元素。
语法
arrayobject.slice(start,end)
start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
var arr = [1,2,3,4,5,6] arr.slice(2, 3) //返回[3]
splice()
splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
注释:该方法会改变原始数组。arrayobject.splice(index,howmany,item1,.....,itemx)
index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, ..., itemx 可选。向数组添加的新项目。
如,向数组的起始位置插入一个新的元素 -1
var arr = [1,2,3,4,5,6] arr.splice(0,0, -1) //返回[],第二个参数为0,即不删除任何元素 console.log(arr) > [-1, 1, 2, 3, 4, 5, 6]
用slice复制数组
使用 slice(0) 可以快速复制并生成 一个新的数组,不过数组是新的,里面的元素还是原来的引用,比如:
var o = [1, 2] var arr = [ 3, 4, o ] var clone = arr.slice(0) console.log(clone) > [3, 4, array[2]]
用concat复制数组
array.concat 数组拼接函数也可以用来复制数组,比如:
var o = [1, 2] var arr = [ 3, 4, o ] var clone = arr.concat() console.log(clone) > [3, 4, array[2]]
不过 slice和concat 生成的数组是新的,但里面的元素还是原来的引用,比如:
clone[2].push(3) console.log(o) > [1, 2, 3]
用json parse/ strinigfy 进行深度复制
可以使用 json.parse(json.stringify(arr)) 对对象或数组进行快速深度复制,此种方法无法复制 function 等无法序列化的对象,比如:
var o = [1, 2] var arr = [ 3, 4, o ] var clone = json.parse(json.stringify(arr)) console.log(clone) > [3, 4, array[2]] clone[2].push(3) console.log(o) > [1, 2] //o元素没有变化
参考:
下一篇: JS正则表达式验证中文字符
推荐阅读
-
Jquery中children与find之间的区别详细解析
-
结合代码图文讲解JavaScript中的作用域与作用域链
-
Java 中的 equals,==与 hashCode 的区别与联系
-
浅谈python中np.array的shape( ,)与( ,1)的区别
-
javascript中apply、call和bind的使用区别
-
简单理解JavaScript中的封装与继承特性
-
java中extends与implements的区别浅谈
-
JavaScript中的toString()和toLocaleString()方法的区别
-
微信小程序 image组件binderror使用例子与js中的onerror区别
-
android中Intent传值与Bundle传值的区别详解