How to Clone an Array in Javascript?

  • 时间:2020-09-17 14:26:24
  • 分类:网络文摘
  • 阅读:138 次

In Javascript, the arrays are passed by reference, and sometimes we want to clone an array. We cannot use the simple = operator as the reference is assigned.

1
2
3
4
var arr = [1, 2, 3];
var newArray = arr;
// true, as they both point to the same memory location
console.log(arr === newArray);
var arr = [1, 2, 3];
var newArray = arr;
// true, as they both point to the same memory location
console.log(arr === newArray);

We can also use Array.from, the ES6 syntax sugar – triple dot spreader , or the old fashion way .slice() to return a new copy of the array. Let’s see the following examples.

1
2
3
4
5
6
7
8
9
10
11
12
13
var arr = [1, 2, 3, 4];
var newArr0 = arr;
var newArr1 = arr.slice();
var newArr2 = [...arr];
var newArr3 = Array.from(arr);
 
// true
console.log(arr === newArr0);
 
// all below are showing false as new arrays are cloned
console.log(arr === newArr1);
console.log(arr === newArr2);
console.log(arr === newArr3);
var arr = [1, 2, 3, 4];
var newArr0 = arr;
var newArr1 = arr.slice();
var newArr2 = [...arr];
var newArr3 = Array.from(arr);

// true
console.log(arr === newArr0);

// all below are showing false as new arrays are cloned
console.log(arr === newArr1);
console.log(arr === newArr2);
console.log(arr === newArr3);

Is that it? How about multidimensional arrays? Are the above methods supposed to do their jobs?

1
2
3
4
5
6
7
8
9
10
11
12
13
var arr = [[1, 2], [3, 4]];
var newArr1 = arr.slice();
var newArr2 = [...arr];
var newArr3 = Array.from(arr);
 
newArr1[0][0] = 'a';
console.log(arr[0][0]); // prints a
 
newArr2[0][0] = 'b';
console.log(arr[0][0]); // prints b
 
newArr3[0][0] = 'c';
console.log(arr[0][0]); // prints c
var arr = [[1, 2], [3, 4]];
var newArr1 = arr.slice();
var newArr2 = [...arr];
var newArr3 = Array.from(arr);

newArr1[0][0] = 'a';
console.log(arr[0][0]); // prints a

newArr2[0][0] = 'b';
console.log(arr[0][0]); // prints b

newArr3[0][0] = 'c';
console.log(arr[0][0]); // prints c

It turns out that all the above methods are providing the shallow copies – where only the first dimensions are copied by values and the subsequent dimensions are still copying the references. Therefore, if you change the values in the above 2 dimensional ‘cloned’ arrays, the original arrays are impacted even those three ‘cloned’ arrays are of different memory locations!

The deep clone (or deep copy) in Javascript, can be done via a custom deep copy function, as detailed in: How to Clone Variables (The Clone Function) in Javascript?

–EOF (The Ultimate Computing & Technology Blog) —

推荐阅读:
Algorithms to Shift a 2D Grid/Matrix In-Place  How Martha Stewart Became One Of The Best Bloggers On The Web  Social Media and Dating Apps: How They’re Changing Love  Did You Know There Are Some Great Scientific Reasons to Use Emot  5 Simple Tips for Creating More Irresistible Product Pages  You Should Know These Facts About Instagram  Why Bloggers Need to Understand Google Rankbrain  How to Write Compelling Blog Content for Boring Niches  Why Curvy Blogger Put On A Bikini For The First Time In 25 Years  Blogger Gives His Secret To Becoming A Millionaire By Age 30 
评论列表
添加评论