【线上直播】11月21日晚8点贝壳技术总监侯圣文《数据安全之数据库安全黄金法则》
数组拷贝经常被误解,但这并不是因为拷贝过程本身,而是因为缺乏对 JS 如何处理数组及其元素的理解。JS 中的数组是可变的,这说明在创建数组之后还可以修改数组的内容。
这意味着要拷贝一个数组,咱们不能简单地将旧数组分配给一个新变量,它也是一个数组。如果这样做,它们将共享相同的引用,并且在更改一个变量之后,另一个变量也将受到更改的影响。这就是我们需要克隆这个数组的原因。
我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取。
接着来看看一些关于拷贝何克隆数组的有趣方法和技巧。
技巧 1 - 使用`Array.slice`方法
- 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 - 使用`Array.map`方法
- const numbers = [1, 2, 3, 4, 5]
-
- const copy = numbers.map( num => num )
- copy.push(6) // 添加新项以证明不会修改原始数组
-
- console.log(copy);
- console.log(numbers);
-
- // 输出
- // [1, 2, 3, 4, 5, 6]
- // [1, 2, 3, 4, 5]
技巧 3 - 使用`Array.from `方法
- 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]
技巧 4 - 使用展开操作符
- 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]
技巧 5 - 使用 `Array.of` 方法和展开操作符
- 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]
Array.of() 方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。Array.of() 和 Array 构造函数之间的区别在于处理整数参数:Array.of(7) 创建一个具有单个元素 7 的数组,而 Array(7) 创建一个长度为7的空数组(注意:这是指一个有7个空位(empty)的数组,而不是由7个undefined组成的数组)。
- Array.of(7); // [7]
- Array.of(1, 2, 3); // [1, 2, 3]
-
- Array(7); // [ , , , , , , ]
- Array(1, 2, 3); // [1, 2, 3]
技巧 6 - 使用 Array 构造函数和展开操作符
- 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]
(编辑:ASP站长网)
|