数组:扁平化、去重、深拷贝

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
    }
上一篇 下一篇

猜你喜欢

热点阅读