0%

JS Array Slice

slice() 中文直譯為切片,即是從陣列複製一份出來。
有時我們想要處理陣列資料,又不想動到原始資料,因為一但動到原始資料就無法回復原本的樣子,甚至要比對都無從比對,這時 slice()就常派上用場。
這點感覺有點像 git,先把資料 pull 一份下來的動作一樣。

語法:arr.slice([begin[, end]]) ,參數一是從哪裡切,參數二是切到哪裡,如果要全部複製則可填 0,如有第二參數,它的索引值為指定的前一個

MDN:slice();

1
var amis = ['Ayda', 'Phi', 'Alex', 'Chris', 'Tracy', 'Thomas', 'Jean'];

沒給參數和參數零的結果是一樣的

1
2
3
4
5
var amis2 = amis.slice();
console.log('沒參數: ' + amis2); // Ayda,Phi,Alex,Chris,Tracy,Thomas,Jean

var amis3 = amis.slice(0);
console.log('參數0: ' + amis3); // Ayda,Phi,Alex,Chris,Tracy,Thomas,Jean

只給一個參數,會從給的 index 開始切

1
2
var amis4 = amis.slice(2);
console.log('只給一個參數: ' + amis4); // Alex,Chris,Tracy,Thomas,Jean

給負數參數,會從最後面開始取

1
2
var amis5 = amis.slice(-2);
console.log('給負數參數: ' + amis5); // Thomas,Jean

給兩個參數,

1
2
3
4
5
6
7
8
var amis6 = amis.slice(2, -2);
console.log('給兩個參數: ' + amis6); // Alex,Chris,Tracy

// 第二參數的索引值為指定的前一個
var amis7 = amis.slice(2, 4);
console.log('給兩個參數: ' + amis7); // Alex,Chris

console.log('原始陣列不變: ' + amis); // Ayda,Phi,Alex,Chris,Tracy,Thomas,Jean

在使用 slice() 的時候並不需要再用另一個變數去接結果,因為使用 slice()時,就會自動的在新的記憶體位址產生。

1
console.log(amis.slice(2, 4)); // Alex,Chris