一、了解数组切片
在 JavaScript 中,数组切片指从一个数组中抽取部分元素返回一个新的数组。通过数组切片,我们可以很方便地获取想要的部分元素,甚至可以创建新的数组。数组切片有两个常用的方法:slice()和splice()。
二、使用slice()方法
slice()方法用于从原始数组中返回一个目标数组,具体使用方式是:arrayObject.slice(start, end)。其中,start和end是两个可选参数,start表示抽取的起始元素的下标,end表示终止位置的下标,但不包括该元素。如果不传入任何参数,则返回原数组的一份拷贝。
let arr = [0, 1, 2, 3, 4, 5]; let newArr = arr.slice(1,4); console.log(newArr) //[1,2,3]
如果索引为负数,则表示从数组的倒数第几个元素开始抽取。
let arr = [0, 1, 2, 3, 4, 5]; let newArr = arr.slice(-3,-1); console.log(newArr) //[3,4]
三、使用splice()方法
splice()方法用于从原始数组中删除一个或多个元素或者插入一个或多个元素。具体使用方式是:arrayObject.splice(index,howmany,item1,.....,itemX)。其中,index 表示从哪个位置开始删除/插入元素,howmany 表示需要删除的元素个数,item1 到 itemX 表示需要插入的元素,如果没有插入元素则省略。
let arr = [0, 1, 2, 3, 4, 5]; arr.splice(2, 2); console.log(arr) //[0,1,4,5]
如果 howmany 参数设置为 0,则可以实现数组中插入元素。
let arr = [0, 1, 2, 3, 4, 5]; arr.splice(2, 0, 'a', 'b'); console.log(arr) //[0,1,"a","b",2,3,4,5]
四、切片应用场景
通过数组切片,我们可以很方便地获取想要的部分元素,从而可以减少循环次数,提高程序性能。
五、数组切片的性能优化
在使用数组切片时,也需要注意一些性能问题。为了提高性能,可以采用以下方式进行优化:
1. 避免在循环中重复调用 slice()方法
slice()方法每次调用都会创建一个新的数组。当数据量较大时,重复调用 slice()方法会消耗大量的内存和CPU资源。因此,可以将 slice()结果存储在外部变量中,避免在循环中重复调用。
let arr = [0, 1, 2, 3, 4, 5]; let len = arr.length; let newArr = arr.slice(2, 4); for (let i = 0; i < len; i++) { console.log(newArr[i]); //每次循环直接使用 newarr[i],而不是 arr.slice(2,4)[i] }
2.使用原生的循环代替 forEach()方法
forEach()方法是循环数组元素最常用的方法之一,但它并不是最高效的方法。相较于使用原生循环,forEach()方法需要更多的 CPU 资源和内存。因此,可以考虑使用原生的循环代替 forEach()方法。
let arr = [0, 1, 2, 3, 4, 5]; let newArr = arr.slice(2, 4); for (let i = 0, len = newArr.length; i < len; i++) { console.log(newArr[i]); }
3.使用链式调用代替多次切片操作
如果需要对数组进行多次切片操作,则可以使用链式调用代替多次切片操作,这将减少内存和 CPU 的使用。例如:
let arr = [0, 1, 2, 3, 4, 5]; let newArr = arr.slice(2, 4).reverse().slice(1, 2); console.log(newArr) //[3]
六、总结
数组切片是一个很有用的工具,可以方便地获取数组的部分元素,甚至可以创建新的数组。在使用数组切片时,需要注意以下几点:
1.避免在循环中重复调用 slice()方法;
2.使用原生的循环代替 forEach()方法;
3.使用链式调用代替多次切片操作。