数组:扁平化、去重、深拷贝
2021-08-26 本文已影响0人
輪徊傷
数组扁平化
var arr = [1,2,[3,[4],5],[6],7]
// var deepFlatten = arr => [].concat(...arr.map(i => Array.isArray(i)?deepFlatten(i):i))
function deepFlatten(arr){
return [].concat(...arr.map(i => Array.isArray(i)?deepFlatten(i):i))
}
console.log(deepFlatten(arr)) // [1, 2, 3, 4, 5, 6, 7]
数组去重
1、ES6 Set 去重
var arr = [1,2,3,4,2,3,5,6,3,7,8,9]
console.log(new Set(arr)) // [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
利用对象的属性不会重复这一特性,校验数组元素是否重复
var aaa=[1,5,9,4,5,4,4,4]
function norepeat3(arr) {
var obj = {};
var newArr = [];
for(var i = 0; i < arr.length; i++) {
if(obj[arr[i]] == undefined) {
newArr.push(arr[i]);
obj[arr[i]] = 1;
console.log(obj[arr[i]])
}
}
return newArr;
}
console.log(norepeat3(aaa))
深拷贝
function B(){
this.a = "aaa",
this.b = 111,
this.c = {
name: 'Libin',
age: 18
}
}
B.prototype.d = ['a','b']
var bbb = new B()
var tempbbb = deepClone(bbb)
console.log(tempbbb)
deepClone(bbb)
// 深拷贝======for...in循环对象的所有枚举属性,然后再使用hasOwnProperty()方法来忽略继承属性。
function deepClone(data){
const tempData = data.constructor === Array ? []:{}// 第一步复制的目标是数组还是对象
for(let keys in data){ // 遍历目标
// console.log('aaaa')
if(data.hasOwnProperty(keys)){ //Object的hasOwnProperty()方法返回一个布尔值,判断对象是否包含特定的自身(非继承)属性。
// console.log('bbbbbbb')
if(data[keys] && typeof data[keys] === "object"){
tempData[keys] = deepClone(data[keys])
}else{
tempData[keys] = data[keys]
}
}
}
return tempData
}