首頁  >  文章  >  web前端  >  JavaScript中拷貝數組的14個小技巧

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

青灯夜游
青灯夜游轉載
2020-12-18 17:50:237566瀏覽

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

相關推薦:《javascript影片教學

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

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

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

技巧1 - 使用<span style="font-size: 18px;">Array.slice</span>#方法

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

const copy = numbers.slice()
copy.push(6) // 添加新项以证明不会修改原始数组

console.log(copy)
console.log(numbers)

// 输出
// [1, 2, 3, 4, 5, 6]
// [1, 2, 3, 4, 5]

技巧2 - 使用<span style="font-size: 18px;">Array.map</span>方法

Array.from

方法<span style="font-size: 18px;"><pre class="brush:php;toolbar:false">const numbers = [1, 2, 3, 4, 5] const copy = numbers.map( num =&gt; num ) copy.push(6) // 添加新项以证明不会修改原始数组 console.log(copy); console.log(numbers); // 输出 // [1, 2, 3, 4, 5, 6] // [1, 2, 3, 4, 5]</pre></span>技巧4 - 使用展開運算子
const numbers = [1, 2, 3, 4, 5];

const copy = Array.from(new Set(numbers));
copy.push(6); // 添加新项以证明不会修改原始数组

console.log(copy);
console.log(numbers);

// 输出
// [1, 2, 3, 4, 5, 6]
// [1, 2, 3, 4, 5]

技巧5 - 使用

Array.of

方法與展開運算元<span style="font-size: 18px;"><pre class="brush:php;toolbar:false">const numbers = [1, 2, 3, 4, 5]; const copy = [...numbers]; copy.push(6); // 添加新项以证明不会修改原始数组 console.log(copy); console.log(numbers); // 输出  // [1, 2, 3, 4, 5, 6] // [1, 2, 3, 4, 5]</pre></span>Array.of() 方法建立一個具有可變數量參數的新數組實例,而不考慮參數的數量或類型。 Array.of()

Array 建構子之間的差異在於處理整數參數:Array.of(7) 建立一個具有單一元素7 的陣列,而Array(7) 建立一個長度為7的空數組(注意:這是指一個有7個空位( empty)的數組,而不是由7undefined組成的數組)。

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

const copy = Array.of(...numbers);
copy.push(6); // 添加新项以证明不会修改原始数组

console.log(copy);
console.log(numbers);

// 输出 
// [1, 2, 3, 4, 5, 6]
// [1, 2, 3, 4, 5]
技巧6 - 使用Array 建構子和展開運算子
Array.of(7);       // [7] 
Array.of(1, 2, 3); // [1, 2, 3]

Array(7);          // [ , , , , , , ]
Array(1, 2, 3);    // [1, 2, 3]

技巧7 - 使用解構
const numbers = [1, 2, 3, 4, 5];

const copy = new Array(...numbers);
copy.push(6); // 添加新项以证明不会修改原始数组

console.log(copy);
console.log(numbers);

// 输出 
// [1, 2, 3, 4, 5, 6]
// [1, 2, 3, 4, 5]

#技巧8 - 使用Array.concat 方法
const numbers = [1, 2, 3, 4, 5];

const [...copy] = numbers;
copy.push(6); // 添加新项以证明不会修改原始数组

console.log(copy);
console.log(numbers);

// 输出
// [1, 2, 3, 4, 5, 6]
// [1, 2, 3, 4, 5]

技巧9 - 使用

Array.push

## 方法和展開運算元<pre class="brush:php;toolbar:false">const numbers = [1, 2, 3, 4, 5]; const copy = numbers.concat(); copy.push(6); // 添加新项以证明不会修改原始数组 console.log(copy); console.log(numbers); // 输出 // [1, 2, 3, 4, 5, 6] // [1, 2, 3, 4, 5]</pre> <span style="font-size: 18px;"></span>技巧10 - 使用#Array.unshift

## 方法和展開運算元#
const numbers = [1, 2, 3, 4, 5];

let copy = [];
copy.push(...numbers);
copy.push(6); // 添加新项以证明不会修改原始数组

console.log(copy);
console.log(numbers);

// 输出
// [1, 2, 3, 4, 5, 6]
// [1, 2, 3, 4, 5]
<span style="font-size: 18px;">技巧11 - 使用</span>Array.forEach

方法和展開運算元##
const numbers = [1, 2, 3, 4, 5];

let copy = [];
copy.unshift(...numbers);
copy.push(6); // 添加新项以证明不会修改原始数组

console.log(copy);
console.log(numbers);

// 输出
// [1, 2, 3, 4, 5, 6]
// [1, 2, 3, 4, 5]
#技巧12 - 使用<span style="font-size: 18px;"></span>for

迴圈

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

let copy = [];
numbers.forEach((value) => copy.push(value));
copy.push(6); // 添加新项以证明不会修改原始数组

console.log(copy);
console.log(numbers);

// 输出
// [1, 2, 3, 4, 5, 6]
// [1, 2, 3, 4, 5]
技巧13 - 使用<span style="font-size: 18px;"></span>Array.reduce

方法

這個做法是可行,但比較多餘,少用<pre class="brush:php;toolbar:false">const numbers = [1, 2, 3, 4, 5]; let copy = []; for (let i = 0; i &lt; numbers.length; i++) { copy.push(numbers[i]); } copy.push(6); // 添加新项以证明不会修改原始数组 console.log(copy); console.log(numbers); // 输出 // [1, 2, 3, 4, 5, 6] // [1, 2, 3, 4, 5]</pre><span style="font-size: 18px;"></span>技巧14 - 使用古老的apply

方法

const numbers = [1, 2, 3, 4, 5];<pre class="brush:php;toolbar:false">const numbers = [1, 2, 3, 4, 5]; const copy = numbers.reduce((acc, x) =&gt; { acc.push(x); return acc; }, []); copy.push(6); // 添加新项以证明不会修改原始数组 console.log(copy); console.log(numbers); // 输出 // [1, 2, 3, 4, 5, 6] // [1, 2, 3, 4, 5]</pre> <span style="font-size: 18px;"></span>總結

請注意

,上面這些方法執行的是淺拷貝,就是數組是元素是物件的時候,咱們更改物件的值,另一個也會跟著變,就能

技巧4

來說,如果咱們的陣列元素是對象,如下圖:
let copy = [];
Array.prototype.push.apply(copy, numbers);
copy.push(6); // 添加新项以证明不会修改原始数组

console.log(copy);
console.log(numbers);

// 输出
// [1, 2, 3, 4, 5, 6]
// [1, 2, 3, 4, 5]
輸出

##所以上面的技巧適合簡單的資料結構,複雜的結構要使用深拷貝。數組拷貝經常被誤解,但這並不是因為拷貝過程本身,而是因為缺乏對 JS 如何處理數組及其元素的理解。 更多程式相關知識,請造訪:

程式設計教學

! !

以上是JavaScript中拷貝數組的14個小技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除