一、数组去重的五种方法
let arr = [1, 0, 2, 3, 4, 5, 2, 3, 4];
//indexOf去重
function removeRepeat(arr) {
let res = [];
for (let i of arr) {
if (res.indexOf(i) == -1) {
res.push(i);
}
}
return res;
}
// set 去重
function removeRepeat(arr) {
let res = new Set(arr);
return Array.from(res);
}
// for循环去重
function removeRepeat(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
return arr;
}
// filter 去重
function removeRepeat(arr) {
return arr.filter((item, index) => {
return arr.indexOf(item) == index;
});
}
// includes 去重
function removeRepeat(arr) {
let res = [];
for (let i of arr) {
if (!res.includes(i)) {
res.push(i);
}
}
return res;
}
let res = removeRepeat(arr);
console.log(res);
二、深拷贝和浅拷贝
区别:
深拷贝:拷贝对象中的所有数据都进行重新赋值给新对象 对于引用类型 开辟一块新的空间 进行指向 和之前的对象没有关联
浅拷贝:只拷贝第一层对象中的数据 里面的引用不会进行拷贝 对于浅拷贝 引用类型的数值指向同一块内存空间
无论是深拷贝还是浅拷贝 :基本数据类型的值都是相互独立的,深拷贝其中的引用类型值独立、浅拷贝 其中的引用类型指向同一块空间
- 深拷贝
1、for循环
let obj = {
name: "coderqian",
hobby: {
outdoor: "basketball",
indoor: "watch mv",
},
};
function deepClone(obj) {
let newobj = {
};
for (let i in obj) {
if (typeof obj[i] == "Object")