splice本身的词义我自己的理解就是粘合,把两样东西拼接在一起。
image.png
所以splice这个方法,我会看成像医生拿着手术刀在对数组做手术一样,尤其是单词中的p很像手术刀。
语法层面上讲,splice有三个参数,开始位置,长度,和多个需要加入数组的元素。开始位置必须要有,正着数从0开始计数,倒着数从-1开始计数;后面两个参数都是可选,长度可以为0,负数当成0一样处理。
这三个参数就像是告诉医生,你要从哪个位置开始对数组切割,切割多长,切割完之后这段位置你还要不要放别的东西进来,结束后对原数组缝合,你切割下来的东西我会通过返回值给到你。
所以splice是会改变原数组的,并且它的返回值就是所谓的 “由被删除的元素组成的一个数组。如果没有删除元素,则返回空数组。”
从例子解读一下:
1、arr.splice(2)
我的理解:告诉医生在下标为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)
我的理解:倒着数(下标从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"]
所以:原数组被缝合成["parrot", "anemone", "blue", "trumpet", "sturgeon"],splice返回["angel", "clown"]
4、arr.splice(2, 0, "drum")
我的理解:下标为2的地方前开始切割,切0个长度,那就是不操作到后面的元素,在这里切断就可以了,被切断的地方放入'drum',切下来的东西返回给我,没有就是空数组。
var myFish = ["angel", "clown", "mandarin", "sturgeon"];
var removed = myFish.splice(2, 0, "drum");
// 运算后的 myFish: ["angel", "clown", "drum", "mandarin", "sturgeon"]
// 被删除的元素: [], 没有元素被删除
所以:原数组表现出来像是新增,本质还是切割放入。
网友评论