Array.prototype.slice()

slice() 方法将数组的一部分的浅拷贝返回到从开始到结束(不包括结束)选择的新数组对象中,其中开始和结束表示该数组中项目的索引。 不会修改原始数组。

使用 slice 方法返回数组的一部分

slice (Array.prototype.slice()) 方法可以从已有数组中返回指定元素。

它接受两个参数,第一个规定从何处开始选取,第二个规定从何处结束选取(不包括该元素)。

如果没有传参,则默认为从数组的开头开始到结尾结束,这是复制整个数组的简单方式。

slice 返回一个新数组,不会修改原始数组。

简单的例子:

1
2
3

const arr = ["Cat", "Dog", "Tiger", "Zebra"];
const newArray = arr.slice(1, 3); // ["Dog", "Tiger"]

复杂的例子:

1
2
3
4
5
6
7
8
9

function sliceArray(anim, beginSlice, endSlice) {

  return anim.slice(beginSlice, endSlice)

}

const inputAnim = ["Cat", "Dog", "Tiger", "Zebra", "Ant"];
sliceArray(inputAnim, 1, 3); // [ 'Dog', 'Tiger' ]

使用 slice 取代 splice 从数组中移除元素

使用数组时经常遇到要删除一些元素并保留数组剩余部分的情况。

为此,JavaScript 提供了 splice 方法,
它接收两个参数:从哪里开始删除项目的索引,和要删除的项目数。
如果没有提供第二个参数,默认情况下是移除一直到结尾的所有元素。

但 splice 方法会改变调用它的原始数组。 举个例子:

1
2
3
4

const cities = ["Chicago", "Delhi", "Islamabad", "London", "Berlin"];
cities.splice(3, 1);
console.log(cities); // ["Chicago", "Delhi", "Islamabad", "Berlin"]

slice 方法不会改变原始数组,而是返回一个可以保存到变量中的新数组。

slice 方法接收两个参数,从开始索引开始选取到结束(不包括该元素),并在新数组中返回这些元素。

使用 slice 方法替代 splice 有助于避免数组变化产生的副作用。

1
2
3
4
5
6
7
8
9

function nonMutatingSplice(cities) {

  return cities.slice(0, 3);

}

const inputCities = ["Chicago", "Delhi", "Islamabad", "London", "Berlin"];
nonMutatingSplice(inputCities); // ["Chicago", "Delhi", "Islamabad"]