成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

14 個拷貝數組的 JS 技巧

開發 前端
數組拷貝經常被誤解,但這并不是因為拷貝過程本身,而是因為缺乏對 JS 如何處理數組及其元素的理解。JS 中的數組是可變的,這說明在創建數組之后還可以修改數組的內容。

 數組拷貝經常被誤解,但這并不是因為拷貝過程本身,而是因為缺乏對 JS 如何處理數組及其元素的理解。JS 中的數組是可變的,這說明在創建數組之后還可以修改數組的內容。

[[282215]]

這意味著要拷貝一個數組,咱們不能簡單地將舊數組分配給一個新變量,它也是一個數組。如果這樣做,它們將共享相同的引用,并且在更改一個變量之后,另一個變量也將受到更改的影響。這就是我們需要克隆這個數組的原因。

我自己是一名從事了多年開發的web前端老程序員,目前辭職在做自己的web前端私人定制課程,今年年初我花了一個月整理了一份最適合2019年學習的web前端學習干貨,各種框架都有整理,送給每一位前端小伙伴,想要獲取的可以關注我的頭條號并在后臺私信我:前端,即可免費獲取。

接著來看看一些關于拷貝何克隆數組的有趣方法和技巧。

技巧 1 - 使用`Array.slice`方法

 

  1. const numbers = [1, 2, 3, 4, 5] 
  2.  
  3. const copy = numbers.slice() 
  4. copy.push(6) // 添加新項以證明不會修改原始數組 
  5.  
  6. console.log(copy) 
  7. console.log(numbers) 
  8.  
  9. // 輸出 
  10. // [1, 2, 3, 4, 5, 6] 
  11. // [1, 2, 3, 4, 5] 

技巧 2 - 使用`Array.map`方法

 

  1. const numbers = [1, 2, 3, 4, 5] 
  2.  
  3. const copy = numbers.map( num => num ) 
  4. copy.push(6) // 添加新項以證明不會修改原始數組 
  5.  
  6. console.log(copy); 
  7. console.log(numbers); 
  8.  
  9. // 輸出 
  10. // [1, 2, 3, 4, 5, 6] 
  11. // [1, 2, 3, 4, 5] 

技巧 3 - 使用`Array.from `方法

 

  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. const copy = Array.from(new Set(numbers)); 
  4. copy.push(6); // 添加新項以證明不會修改原始數組 
  5.  
  6. console.log(copy); 
  7. console.log(numbers); 
  8.  
  9. // 輸出 
  10. // [1, 2, 3, 4, 5, 6] 
  11. // [1, 2, 3, 4, 5] 

技巧 4 - 使用展開操作符

 

  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. const copy = [...numbers]; 
  4. copy.push(6); // 添加新項以證明不會修改原始數組 
  5.  
  6. console.log(copy); 
  7. console.log(numbers); 
  8.  
  9. // 輸出  
  10. // [1, 2, 3, 4, 5, 6] 
  11. // [1, 2, 3, 4, 5] 

技巧 5 - 使用 `Array.of` 方法和展開操作符

 

  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. const copy = Array.of(...numbers); 
  4. copy.push(6); // 添加新項以證明不會修改原始數組 
  5.  
  6. console.log(copy); 
  7. console.log(numbers); 
  8.  
  9. // 輸出  
  10. // [1, 2, 3, 4, 5, 6] 
  11. // [1, 2, 3, 4, 5] 

Array.of() 方法創建一個具有可變數量參數的新數組實例,而不考慮參數的數量或類型。Array.of() 和 Array 構造函數之間的區別在于處理整數參數:Array.of(7) 創建一個具有單個元素 7 的數組,而 Array(7) 創建一個長度為7的空數組(注意:這是指一個有7個空位(empty)的數組,而不是由7個undefined組成的數組)。

 

  1. Array.of(7); // [7]  
  2. Array.of(1, 2, 3); // [1, 2, 3] 
  3.  
  4. Array(7); // [ , , , , , , ] 
  5. Array(1, 2, 3); // [1, 2, 3] 

技巧 6 - 使用 Array 構造函數和展開操作符

 

  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. const copy = new Array(...numbers); 
  4. copy.push(6); // 添加新項以證明不會修改原始數組 
  5.  
  6. console.log(copy); 
  7. console.log(numbers); 
  8.  
  9. // 輸出  
  10. // [1, 2, 3, 4, 5, 6] 
  11. // [1, 2, 3, 4, 5] 

技巧 7 - 使用解構

 

  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. const [...copy] = numbers; 
  4. copy.push(6); // 添加新項以證明不會修改原始數組 
  5.  
  6. console.log(copy); 
  7. console.log(numbers); 
  8.  
  9. // 輸出 
  10. // [1, 2, 3, 4, 5, 6] 
  11. // [1, 2, 3, 4, 5] 

技巧 8 - 使用 Array.concat 方法

 

  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. const copy = numbers.concat(); 
  4. copy.push(6); // 添加新項以證明不會修改原始數組 
  5.  
  6. console.log(copy); 
  7. console.log(numbers); 
  8.  
  9. // 輸出 
  10. // [1, 2, 3, 4, 5, 6] 
  11. // [1, 2, 3, 4, 5] 

技巧 9 - 使用 `Array.push` 方法和展開操作符

 

  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. let copy = []; 
  4. copy.push(...numbers); 
  5. copy.push(6); // 添加新項以證明不會修改原始數組 
  6.  
  7. console.log(copy); 
  8. console.log(numbers); 
  9.  
  10. // 輸出 
  11. // [1, 2, 3, 4, 5, 6] 
  12. // [1, 2, 3, 4, 5] 

技巧 10 - 使用 `Array.unshift ` 方法和展開操作符

 

  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. let copy = []; 
  4. copy.unshift(...numbers); 
  5. copy.push(6); // 添加新項以證明不會修改原始數組 
  6.  
  7. console.log(copy); 
  8. console.log(numbers); 
  9.  
  10. // 輸出 
  11. // [1, 2, 3, 4, 5, 6] 
  12. // [1, 2, 3, 4, 5] 

技巧 11 - 使用 `Array.forEach` 方法和展開操作符

 

  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. let copy = []; 
  4. numbers.forEach((value) => copy.push(value)); 
  5. copy.push(6); // 添加新項以證明不會修改原始數組 
  6.  
  7. console.log(copy); 
  8. console.log(numbers); 
  9.  
  10. // 輸出 
  11. // [1, 2, 3, 4, 5, 6] 
  12. // [1, 2, 3, 4, 5] 

技巧 12 - 使用 `for` 循環

 

  1. const numbers = [1, 2, 3, 4, 5];let copy = [];for (let i = 0; i < numbers.length; i++) { 
  2.  copy.push(numbers[i]); 
  3. copy.push(6); // 添加新項以證明不會修改原始數組 
  4.  
  5. console.log(copy); 
  6. console.log(numbers); 
  7.  
  8. // 輸出 
  9. // [1, 2, 3, 4, 5, 6] 
  10. // [1, 2, 3, 4, 5] 

技巧 13 - 使用 `Array.reduce` 方法

這個做法是可行,但比較多余,少用

 

  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. const copy = numbers.reduce((acc, x) => { acc.push(x); return acc; }, []); 
  4. copy.push(6); // 添加新項以證明不會修改原始數組 
  5.  
  6. console.log(copy); 
  7. console.log(numbers); 
  8.  
  9. // 輸出 
  10. // [1, 2, 3, 4, 5, 6] 
  11. // [1, 2, 3, 4, 5] 

技巧 14 - 使用古老的 `apply` 方法

const numbers = [1, 2, 3, 4, 5];

 

  1. let copy = []; 
  2. Array.prototype.push.apply(copy, numbers); 
  3. copy.push(6); // 添加新項以證明不會修改原始數組 
  4.  
  5. console.log(copy); 
  6. console.log(numbers); 
  7.  
  8. // 輸出 
  9. // [1, 2, 3, 4, 5, 6] 
  10. // [1, 2, 3, 4, 5] 

代碼部署后可能存在的BUG沒法實時知道,事后為了解決這些BUG,花了大量的時間進行log 調試,這邊順便給大家推薦一個好用的BUG監控工具 Fundebug。

原文:https://twitter.com/protic_milos

總結

請注意,上面這些方法執行的是淺拷貝,就是數組是元素是對象的時候,咱們更改對象的值,另一個也會跟著變,就能技巧4來說,如果咱們的數組元素是對象,如下所示:

 

  1. const authors = [ 
  2.  { name'前端小智', age: 25 },  
  3.  { name'王大冶', age: 30 },  
  4.  
  5. const copy = [...authors ] 
  6. copy[0].name = '被更改過的前端小智' 
  7.  
  8. console.log(copy) 
  9. console.log(authors) 

輸出

 

14 個拷貝數組的 JS 技巧

 

所以上面的技巧適合簡單的數據結構,復雜的結構要使用深拷貝。數組拷貝經常被誤解,但這并不是因為拷貝過程本身,而是因為缺乏對 JS 如何處理數組及其元素的理解。

好啦,本次分享到這里了。

責任編輯:華軒
相關推薦

2020-05-18 10:52:00

前端JavaScript html

2023-02-13 15:09:01

開發webCSS技巧

2012-06-18 16:30:26

WindowsLinux

2020-08-04 08:30:18

JS數組技巧

2020-05-31 18:57:50

CIO影子ITIT運營

2017-09-21 08:56:50

數據管理主流

2024-09-18 15:58:05

2020-03-06 18:43:58

Spring MVC控制器Java

2019-12-12 20:49:05

JavaScript語言運算符

2022-11-01 15:57:44

2019-10-29 16:02:14

開發者技能工具

2025-02-10 00:45:00

pairplotheatmaplmplot

2011-03-01 16:00:08

java數據庫

2023-01-09 17:23:14

CSS技巧

2024-04-01 07:58:49

Next.js 14ReactWeb應用

2020-08-21 17:40:15

JavaScript開發 技巧

2023-12-05 07:59:08

JS小技巧數組對象去重

2014-12-18 13:20:09

Docker容器鏡像數據卷

2010-12-15 09:10:01

PHP關聯數組

2020-06-03 09:08:21

JavaScript開發代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产乱码精品一区二区三区忘忧草 | 日韩精品一区在线 | 日韩国产精品一区二区三区 | 一区二区三区免费观看 | 超碰精品在线 | 国产精品成av人在线视午夜片 | 日韩中文字幕高清 | 成人精品国产免费网站 | 小早川怜子xxxxaⅴ在线 | 国产精品久久久久久久午夜片 | 日本不卡免费新一二三区 | 超碰激情 | 日本一区二区在线视频 | 国产午夜精品一区二区三区嫩草 | 国产精品一区二区三区在线 | 亚洲精品1区2区3区 91免费看片 | 91精品国产欧美一区二区 | 欧美性jizz18性欧美 | 男女羞羞视频大全 | www.9191 | 日韩久草 | 一区观看| 免费在线观看一区二区三区 | 欧美国产日韩一区二区三区 | 日本三级全黄三级三级三级口周 | 久久9久| 国产网站在线免费观看 | 久久婷婷色 | 91欧美激情一区二区三区成人 | 国产高清免费视频 | 亚洲人va欧美va人人爽 | 国产综合精品 | 欧美四虎| 99re在线视频 | 狠狠的干狠狠的操 | 国产一区免费 | 欧美精品日韩精品国产精品 | 欧美一区永久视频免费观看 | 午夜av在线 | 亚洲a在线视频 | 久久精片|