写在前面:面试问到的话,需要尽可能多的把你在可以想到的方法答出来。在平时的算法练习中,拷贝数组是其中一个出现很频繁并且很重要的一步。这一章很轻松的~ 另外复习完这一部分,我接下来去整理一下常见的数组的API。
首先,大家一定知道!但我在啰嗦一句,显得我这个 菜?方方面面!
var arr=["teery","larry","tom","jacky"];
var arr1=arr; //不是克隆
arr1==arr //true,指向同一个对象
另外,这里是简单的针对数组的浅拷贝,关于拷贝的更深入学习。传送门 👉?【手写代码】深拷贝和浅拷贝
开始正题!!!
方法一:蛮力法
Array.prototype.myClone = function(){
var result=[];
for(i=0; i<this.length; i++){
result.push(this[i]); //向result数组尾部添加指定的值
}
? ?return result;
}
// 使用
var arr = ["teery","larry","tom","jacky"];
let arr1 = arr.myClone()
方法二:slice()? 从开始位置截取
let arr2 = arr.slice();
方法三:concat() 和一个空数组合并
let arr3 = [].concat(arr);
方法四:JSON字符串 JSON.stringify JSON.parse
let arr4 = JSON.parse(JSON.stringify(arr)); //先将arr转化为字符串,再将字符串转化为数组
方法五:扩展运算符(es6)
var arr5=[...arr]; //猜出数组中元素
方法六:Object.assign()?
诶,偷个对象的API用用 🚪传送门 👉【手写代码】Object.assign() 原理及实现?
var arr6=Object.assign([],arr);
方法七:lodash (es6拓展库)
|