強大的Array.prototype.splice()

之因此會單獨針對這個api寫這麼一篇博文,一方面是由於最近在一次面試中聊到了這個API,我沒能徹底說出它的用法;另外一方面則是由於經過熟悉後以爲這個api確實很靈活很強大,充分體現了javascript的靈活性。因此寫這麼一篇博文,可讓本身更深入地記住這個方法,也但願能讓更多地同仁用這個方法讓本身的javascript代碼更加簡潔,更加有效率。javascript

MDN Web Docs中對Array.prototype.splice()的描述信息以下前端

splice(start, deleteCount, item1, item2, ...) 方法經過刪除或替換現有元素和/或添加新元素來更改數組的內容。

傳參信息以下java

1. start 從什麼位置開始修改當前數組,這個參數有以下幾種狀況

  • 0到數組長度-1,即當前數組的任意位置。
  • 大於數組長度-1,不報錯,可是不會刪除當前數組的元素,第二個參數無效。可是,若是這個時候傳入了第三個,以及第四個。。。參數,那麼,這些參數值會被添加到數組的末尾位置,也就相似於push方法。
  • 小於0,若是開始位置爲負數,會從數組的末尾倒着查找,如,-1爲最後一個元素,-2爲倒數第二個元素。

2. deleteCount 要刪除的內容的長度,這個參數有以下幾種狀況

  • 0或負數 不刪除數組元素。
  • 大於0而且小於start指定位置到數組最後一個元素的長度,則刪除指定長度的元素。
  • 大於start指定位置到數組最後一個元素的長度,刪除從start位置後面全部的元素,如splice(0, 99999999)會晴空長度小於99999999的數組

3. 在start位置開始要添加或者替換的元素,能夠有多個。

針對上面的描述,咱們一一驗證它的全部用法。面試

刪除元素(第二個參數不爲0,後續參數不傳入,只刪除)

let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(1, 1); // 從第二個位置開始刪掉一個元素
console.log(ary); // ['a', 'c', 'd', 'e', 'f']
let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(1, 2); // 從第二個位置開始刪掉兩個元素
console.log(ary); // ['a', 'd', 'e', 'f']
let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(-2, 1); // 刪掉倒數第二個元素‘e’
console.log(ary); // ['a', 'b', 'c', 'd', 'f']
let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(0, ary.length); // 刪掉全部元素
console.log(ary); // []

添加元素(第二個參數爲0,後續參數不爲空,則只增長不刪除)

let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(ary.length, 0, 'x'); // 在數組末尾追加一個元素
console.log(ary); // ['a', 'b', 'c', 'd', 'e', 'f', 'x']
let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(1, 0, 'x'); // 在數組第二個元素前插入一個元素
console.log(ary); // ['a','x', 'b', 'c', 'd', 'e', 'f']
let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(-2, 0, 'x'); // 在數組倒數第二個元素前插入一個元素
console.log(ary); // ['a', 'b', 'c', 'd', 'x', 'e', 'f']
let ary = ['a', 'b', 'c'];
let ary2 = ['d', 'e', 'f']
ary.splice(ary.length, 0, ...ary2); // 數組拼接
console.log(ary); // ['a', 'b', 'c', 'd', 'e', 'f']

更新/替換元素(第二個參數不爲0,後續參數不爲空,這裏須要注意的是,傳入的替換元素的個數能夠等於前面的長度,也能夠不等於前端的長度)

替換元素其實執行的是先刪除再插入,因此必定要清楚傳入參數的意義
let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(1, 1, 'x'); // 替換第二個元素‘b’爲‘x’ (長度和傳入的替換元素個數都爲一)
console.log(ary); // ['a', 'x', 'c', 'd', 'e', 'f']
let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(1, 2, 'x'); // 刪掉第二個和第三個元素‘b’ ‘c’,插入一個元素‘x’ (長度大於傳入的替換元素個數)
console.log(ary); // ['a', 'x', 'd', 'e', 'f']
let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(1, 2, 'x', 'y', 'z'); // 刪掉第二個和第三個元素‘b’ ‘c’,插入三個元素‘x’,‘y’, ‘z’ (長度小於傳入的替換元素個數)
console.log(ary); // ['a', 'x','y', 'z', 'd', 'e', 'f']

上面這些就是我目前總結的經常使用的splice的用法,若有更多使用方法,歡迎留言討論api

相關文章
相關標籤/搜索