简介:很多概念不清或忘记,重新构建自己的知识体系。每天问自己1~多个问题。我是菜鸟 成为大神之路!
学习ES6 之后的学习很多地方都会涉及到 ES6的相关内容。
1. JavaScript 数组拷贝(复制)有哪些方法以及推荐?
var arrayOne = [{ 'id': 13, 'projectName': '我的第一篇文章', 'projectTag': [ '文章' ], 'privacy': false }, { 'id': 14, 'projectName': '网址收藏推荐系统', 'projectTag': [ 'java,webApp,网址收藏' ], 'privacy': false }];var arrayTwo=[];复制代码
①为什么要深拷贝数组?
什么是深拷贝:深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。
=
号进行 arrayTwo = arrayOne;这样的赋值
特别的在数组作为参数传递时,场景我们希望arrayTwo
作为数据的临时存储区,将arrayOne
给arrayTwo
,改变arrayOne
的内容。 arrayTwo = arrayOne;arrayOne[1].id = 19999;console.log(arrayOne);console.log(arrayTwo);复制代码
② for循环 【对象数组浅拷贝,基本类型数组深拷贝】
for(let i = 0;i< arrayOne.length; i++){ arrayTwo.push(arrayOne[i]);}arrayOne[1].id = 19999;console.log(arrayOne);console.log(arrayTwo);复制代码
③Array.prototype.slice() 方法 【对象数组浅拷贝,基本类型数组深拷贝】【推荐】
返回一个新的数组对象,这一对象是一个由 begin和 end(不包括end)决定的原数组的浅拷贝。原始数组不会被改变。
arrayTwo = arrayOne.slice(0);arrayOne[1].id = 19999;console.log(arrayOne);console.log(arrayTwo);复制代码
④Array.prototype.concat()方法 【对象数组浅拷贝,基本类型数组深拷贝】
用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
arrayTwo = arrayOne.concat();arrayOne[1].id = 19999;console.log(arrayOne);console.log(arrayTwo);复制代码
⑤Array.from() 方法 【推荐使用⭐⭐⭐】[补充2019年1月7日 12点45分]资源
从一个类似数组或可迭代对象中创建一个新的数组实例
var arr1 = [1,2,6,4];var arr = Array.from(arr1); // [1,2,6,4]复制代码
⑥...
ES6 -Rest方法【推荐使用⭐⭐⭐⭐】[充2019年1月7日 12点45分]资源
let arr1 = [1,2,6,4];let arr = [...arr1]; // [1,2,6,4]复制代码
2. JavaScript 对象拷贝(复制)有哪些方法以及推荐?
思想利用对象属性取值 这里涉及 获取对象的属性(第三天的内容)
'看到公司使用的是 for-in'var objOne = { 'id': 13, 'projectName': '我的第一篇文章', 'projectTag': [ '文章' ], 'privacy': false };var objTwo = {};for(var pro in objOne){ objTwo[pro] = objOne[pro];}console.log(objOne);console.log(objTwo);复制代码
3. 清空数组的方法及推荐?
①Array.prototype.slice() 方法【推荐⭐⭐
var array = [1,2,3,4]; array.splice(0,array.length); console.log(array); // 输出 [],空数组,即被清空了复制代码
②length赋值为0【推荐⭐⭐⭐】
var array = [1,2,3,4]; array.length = 0; console.log(array); // 输出 [],空数组,即被清空了复制代码
③赋值为[]
【推荐⭐⭐⭐⭐】
var array = [1,2,3,4]; array = []; // 赋值为一个空数组以达到清空原数组 复制代码