日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
14個(gè)拷貝數(shù)組的JS技巧

 數(shù)組拷貝經(jīng)常被誤解,但這并不是因?yàn)榭截愡^(guò)程本身,而是因?yàn)槿狈?duì) JS 如何處理數(shù)組及其元素的理解。JS 中的數(shù)組是可變的,這說(shuō)明在創(chuàng)建數(shù)組之后還可以修改數(shù)組的內(nèi)容。

成都創(chuàng)新互聯(lián)是一家專(zhuān)注于網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),烏魯木齊網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:烏魯木齊等地區(qū)。烏魯木齊做網(wǎng)站價(jià)格咨詢(xún):18982081108

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

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

接著來(lái)看看一些關(guān)于拷貝何克隆數(shù)組的有趣方法和技巧。

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

 
 
 
 
  1. const numbers = [1, 2, 3, 4, 5] 
  2.  
  3. const copy = numbers.slice() 
  4. copy.push(6) // 添加新項(xiàng)以證明不會(huì)修改原始數(shù)組 
  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) // 添加新項(xiàng)以證明不會(huì)修改原始數(shù)組 
  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); // 添加新項(xiàng)以證明不會(huì)修改原始數(shù)組 
  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 - 使用展開(kāi)操作符

 
 
 
 
  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. const copy = [...numbers]; 
  4. copy.push(6); // 添加新項(xiàng)以證明不會(huì)修改原始數(shù)組 
  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` 方法和展開(kāi)操作符

 
 
 
 
  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. const copy = Array.of(...numbers); 
  4. copy.push(6); // 添加新項(xiàng)以證明不會(huì)修改原始數(shù)組 
  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() 方法創(chuàng)建一個(gè)具有可變數(shù)量參數(shù)的新數(shù)組實(shí)例,而不考慮參數(shù)的數(shù)量或類(lèi)型。Array.of() 和 Array 構(gòu)造函數(shù)之間的區(qū)別在于處理整數(shù)參數(shù):Array.of(7) 創(chuàng)建一個(gè)具有單個(gè)元素 7 的數(shù)組,而 Array(7) 創(chuàng)建一個(gè)長(zhǎng)度為7的空數(shù)組(注意:這是指一個(gè)有7個(gè)空位(empty)的數(shù)組,而不是由7個(gè)undefined組成的數(shù)組)。

 
 
 
 
  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 構(gòu)造函數(shù)和展開(kāi)操作符

 
 
 
 
  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. const copy = new Array(...numbers); 
  4. copy.push(6); // 添加新項(xiàng)以證明不會(huì)修改原始數(shù)組 
  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 - 使用解構(gòu)

 
 
 
 
  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. const [...copy] = numbers; 
  4. copy.push(6); // 添加新項(xiàng)以證明不會(huì)修改原始數(shù)組 
  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); // 添加新項(xiàng)以證明不會(huì)修改原始數(shù)組 
  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` 方法和展開(kāi)操作符

 
 
 
 
  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. let copy = []; 
  4. copy.push(...numbers); 
  5. copy.push(6); // 添加新項(xiàng)以證明不會(huì)修改原始數(shù)組 
  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 ` 方法和展開(kāi)操作符

 
 
 
 
  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. let copy = []; 
  4. copy.unshift(...numbers); 
  5. copy.push(6); // 添加新項(xiàng)以證明不會(huì)修改原始數(shù)組 
  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` 方法和展開(kāi)操作符

 
 
 
 
  1. const numbers = [1, 2, 3, 4, 5]; 
  2.  
  3. let copy = []; 
  4. numbers.forEach((value) => copy.push(value)); 
  5. copy.push(6); // 添加新項(xiàng)以證明不會(huì)修改原始數(shù)組 
  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` 循環(huán)

 
 
 
 
  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); // 添加新項(xiàng)以證明不會(huì)修改原始數(shù)組 
  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` 方法

這個(gè)做法是可行,但比較多余,少用

 
 
 
 
  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); // 添加新項(xiàng)以證明不會(huì)修改原始數(shù)組 
  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); // 添加新項(xiàng)以證明不會(huì)修改原始數(shù)組 
  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沒(méi)法實(shí)時(shí)知道,事后為了解決這些BUG,花了大量的時(shí)間進(jìn)行l(wèi)og 調(diào)試,這邊順便給大家推薦一個(gè)好用的BUG監(jiān)控工具 Fundebug。

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

總結(jié)

請(qǐng)注意,上面這些方法執(zhí)行的是淺拷貝,就是數(shù)組是元素是對(duì)象的時(shí)候,咱們更改對(duì)象的值,另一個(gè)也會(huì)跟著變,就能技巧4來(lái)說(shuō),如果咱們的數(shù)組元素是對(duì)象,如下所示:

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

輸出

所以上面的技巧適合簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),復(fù)雜的結(jié)構(gòu)要使用深拷貝。數(shù)組拷貝經(jīng)常被誤解,但這并不是因?yàn)榭截愡^(guò)程本身,而是因?yàn)槿狈?duì) JS 如何處理數(shù)組及其元素的理解。

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


當(dāng)前標(biāo)題:14個(gè)拷貝數(shù)組的JS技巧
鏈接地址:http://m.5511xx.com/article/djcjcsj.html