splice本身的詞義我自己的理解就是粘合,把兩樣?xùn)|西拼接在一起。

所以splice這個方法,我會看成像醫(yī)生拿著手術(shù)刀在對數(shù)組做手術(shù)一樣,尤其是單詞中的p很像手術(shù)刀。
語法層面上講,splice有三個參數(shù),開始位置,長度,和多個需要加入數(shù)組的元素。開始位置必須要有,正著數(shù)從0開始計數(shù),倒著數(shù)從-1開始計數(shù);后面兩個參數(shù)都是可選,長度可以為0,負數(shù)當成0一樣處理。
這三個參數(shù)就像是告訴醫(yī)生,你要從哪個位置開始對數(shù)組切割,切割多長,切割完之后這段位置你還要不要放別的東西進來,結(jié)束后對原數(shù)組縫合,你切割下來的東西我會通過返回值給到你。
所以splice是會改變原數(shù)組的,并且它的返回值就是所謂的 “由被刪除的元素組成的一個數(shù)組。如果沒有刪除元素,則返回空數(shù)組?!?/p>
從例子解讀一下:
1、arr.splice(2)
我的理解:告訴醫(yī)生在下標為2的地方前開始切割(就是下標為2的那個前面的逗號,不是后面的逗號),一直切到最后,也不用放別的東西進來。切下來的東西返回給我。
var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(2);
// 運算后的 myFish: ["angel", "clown"]
// 被刪除的元素: ["mandarin", "sturgeon"]
所以:myFish會改變,變成["angel", "clown"],splice返回值是["mandarin", "sturgeon"]
2、arr.splice(-2, 1)
我的理解:倒著數(shù)(下標從1開始記)下標為2的地方前開始切割,切1個長度,也不用替換(不用放別的東西進來)。切下來的東西返回給我。
var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(-2, 1);
// 運算后的 myFish: ["angel", "clown", "sturgeon"]
// 被刪除的元素: ["mandarin"]
所以:myFish改變了,變成["angel", "clown", "sturgeon"];splice返回值["mandarin"]
3、arr.splice(0, 2, 'parrot', 'anemone', 'blue')
我的理解:下標為0的地方前開始切割,切2個長度,被切的地方放入'parrot', 'anemone', 'blue',切下來的東西返回給我。
var myFish = ['angel', 'clown', 'trumpet', 'sturgeon'];
var removed = myFish.splice(0, 2, 'parrot', 'anemone', 'blue');
// 運算后的 myFish: ["parrot", "anemone", "blue", "trumpet", "sturgeon"]
// 被刪除的元素: ["angel", "clown"]
所以:原數(shù)組被縫合成["parrot", "anemone", "blue", "trumpet", "sturgeon"],splice返回["angel", "clown"]
4、arr.splice(2, 0, "drum")
我的理解:下標為2的地方前開始切割,切0個長度,那就是不操作到后面的元素,在這里切斷就可以了,被切斷的地方放入'drum',切下來的東西返回給我,沒有就是空數(shù)組。
var myFish = ["angel", "clown", "mandarin", "sturgeon"];
var removed = myFish.splice(2, 0, "drum");
// 運算后的 myFish: ["angel", "clown", "drum", "mandarin", "sturgeon"]
// 被刪除的元素: [], 沒有元素被刪除
所以:原數(shù)組表現(xiàn)出來像是新增,本質(zhì)還是切割放入。