国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

在JavaScript 中 14 個拷貝數組的技巧

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

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

[[326489]]

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

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

技巧 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]; 
  2.  
  3. let copy = []; 
  4. for (let i = 0; i < numbers.length; i++) { 
  5.     copy.push(numbers[i]); 
  6. copy.push(6); // 添加新項以證明不會修改原始數組 
  7.  
  8. console.log(copy); 
  9. console.log(numbers); 
  10.  
  11. // 輸出 
  12. // [1, 2, 3, 4, 5, 6] 
  13. // [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 方法

 

  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) 

 

輸出

 

 

 

 

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

責任編輯:華軒 來源: SegmentFault
相關推薦

2019-11-13 14:58:39

JavaScriptNumbers程序員

2019-12-12 20:49:05

JavaScript語言運算符

2020-08-21 17:40:15

JavaScript開發 技巧

2025-04-27 09:45:58

JavaScript深拷貝淺拷貝

2023-02-13 15:09:01

開發webCSS技巧

2021-07-16 12:33:24

Javascript深拷貝淺拷貝

2014-12-18 13:20:09

Docker容器鏡像數據卷

2017-11-07 21:58:25

前端JavaScript調試技巧

2011-03-01 16:00:08

java數據庫

2012-06-18 16:30:26

WindowsLinux

2020-10-12 08:35:22

JavaScript

2016-08-03 17:23:47

javascripthtml前端

2020-05-31 18:57:50

CIO影子ITIT運營

2017-09-21 08:56:50

數據管理主流

2022-12-22 14:44:06

JavaScript技巧

2023-08-11 17:39:43

JavaScriptWeb 應用程序

2022-12-25 16:03:31

JavaScript技巧

2023-05-16 15:32:45

JavaScriptWeb前端工程師

2020-09-29 08:14:46

JavaScript開發代碼

2024-08-21 14:55:02

點贊
收藏

51CTO技術棧公眾號

亚洲午夜伦理| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 日本男人操女人| 国产一级久久| 91精品国产高清久久久久久91裸体 | 成人日韩在线电影| 亚瑟一区二区三区四区| 精品久久久91| 久久天堂影院| 精品在线小视频| 性欧美videoshd高清| 欧美日韩中文字幕一区二区| 青青草在线免费视频| 天天综合天天做天天综合| 国产福利电影| 亚洲一区二区五区| 又黄又爽在线观看| 欧美性猛交xxxx久久久| 免费毛片在线| 91精品国产综合久久久久| 午夜影院免费在线| 日韩av在线播放资源| 第四色男人最爱上成人网| 日韩视频在线免费观看| 免费精品一区| 欧美最猛黑人xxxx黑人猛叫黄| 欧美精品久久久久久| 99久热re在线精品996热视频| 在线不卡亚洲| 亚洲精品一区二| 成人动漫一区二区三区| 欧美激情精品久久久久久小说| 国产日韩欧美精品在线| 人人在线97| 欧美日韩国产另类不卡| 国产精品69xx| 日韩一区二区av| 免费欧美激情| 国产亚洲精品久久飘花| 久久国产生活片100| 少妇大叫太大太粗太爽了a片小说| 26uuu国产日韩综合| 日本免费高清视频| 欧美一级淫片007| 香蕉视频亚洲一级| 91高清视频在线免费观看| 欧美日韩123| 九九九久久久| 99re热视频精品| 国产香蕉尹人视频在线| 欧美一个色资源| 91精品国产色综合久久不卡粉嫩| 国产成人精品亚洲精品| 中文日韩在线| 麻豆tv在线播放| 天天射综合影视| 人人视频精品| 国产中文日韩欧美| 国产一区 二区 三区一级| 伊人影院综合在线| 91精品国产入口| 综合激情网...| 国产视频精品网| 91网站最新网址| 免费一级在线观看播放网址| 亚洲桃花岛网站| 99精品美女| 亚洲人精品午夜射精日韩| 午夜欧美视频在线观看| 另类图片综合电影| 国产精品一二三在线| 久久99国产精品尤物| 午夜影院观看视频免费| 亚洲欧美国产精品| 亚欧美无遮挡hd高清在线视频| 日韩中文在线字幕| 亚洲一区二区在线免费观看视频| 91色在线看| 成人免费视频97| 99久久精品国产毛片| 色久视频在线播放| 久精品免费视频| 美女网站一区二区| 深夜福利在线观看直播| 久久99久久久久久久噜噜| 肉丝袜脚交视频一区二区| 超碰97在线免费| 久久精品亚洲94久久精品| 天堂久久一区二区三区| 免费一级大片| 久久久国产成人精品| 视频一区视频二区在线观看| 三上悠亚一区| 九九久久精品一区| 国产一区二区三区视频在线播放| 国产日韩精品在线看| 日韩av色综合| 久久久久久久精| 福利在线免费视频| 92裸体在线视频网站| 亚洲欧洲成人自拍| jizz久久久久久| 亚洲精品乱码久久久久久蜜桃91 | 51精品久久久久久久蜜臀| youjizz亚洲| 久久精品国产精品亚洲精品色| 精品久久久久久久久久久久久久| 日本伊人久久| 国产曰肥老太婆无遮挡| 精品国产乱码久久久久久夜甘婷婷| 一区二区影视| 在线午夜视频| 国产精品久久久av| 亚洲国产高清aⅴ视频| 性欧美1819sex性高清| 亚洲国产精品久久久久婷婷老年 | 麻豆国产欧美一区二区三区| av在线播放网| 99re视频在线观看| 精品女同一区二区三区在线播放| 久久久伦理片| 视频在线观看免费高清| 欧美成人激情在线| 久久综合久久综合久久综合| 涩涩视频在线播放| 一区二区三区欧美成人| 欧美成人在线直播| 欧美3p视频| 中文在线二区| av色综合网| 欧美日韩在线播| 宅男噜噜噜66国产日韩在线观看| 可以在线观看的av| 国产99在线免费| 91精品国产综合久久福利| 一区二区三区四区五区在线| av在线播放网| 日本一区二区高清视频| 亚洲成人av资源网| 国产成人日日夜夜| 四虎成人精品一区二区免费网站| 国产男女激情视频| 日韩美女毛茸茸| 精品高清美女精品国产区| 欧美激情91| 欧洲在线视频| 久久成人福利视频| 亚洲18私人小影院| 日韩欧美黄色动漫| 久久亚洲国产精品一区二区| 中文日产幕无线码一区二区| 99爱视频在线| 国产精品午夜国产小视频| 在线观看欧美日本| 精品一区二区三区视频在线观看| 色成人综合网| 麻豆电影在线| 中文字幕一区二区三区四区不卡 | 日韩视频永久免费| 日韩av高清在线观看| 欧洲一级精品| 亚洲欧美日韩一级| 成人xxxx视频| 精品卡一卡二卡三卡四在线| 国产91精品露脸国语对白| 蜜桃在线一区| 日本啊v在线| 综合久久国产| 91国产美女视频| 欧美日韩你懂得| 成人18视频日本| 四季av一区二区三区免费观看| 欧美亚洲系列| 亚州福利视频| 欧美日韩国产免费一区二区三区| 国产小视频国产精品| 亚洲欧美另类久久久精品2019| 亚洲精品欧洲| 日本免费一区二区视频| 毛片网站在线| 国产精品久久中文字幕| 成人性生交大片免费看小说| 亚洲乱码国产乱码精品精| 伊人婷婷欧美激情| 日本亚洲三级在线| 亚洲成人一品| 好看的中文字幕在线播放| 国产精品久久久毛片| 亚洲一区二区三区sesese| 亚洲网在线观看| 欧美性生交xxxxxdddd| 成人av在线资源网站| 亚洲成人99| 国产亚洲欧美日韩精品一区二区三区 | 一区二区三区美女xx视频| 一区二区三区影院| 国产精品一区免费在线观看| 久久精品高清| 国产一区一区| 亚洲七七久久综合桃花剧情介绍|