美文网首页
数组:扁平化、去重、深拷贝

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

作者: 輪徊傷 | 来源:发表于2021-08-26 20:40 被阅读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
    }

相关文章

  • 手撕前端面试代码题

    目录 DOM 事件代理 数组 对象 扁平化 去重 -unique() 拷贝 浅拷贝 深拷贝(copy()函数实现、...

  • 手撕常见面试题

    DOM 事件代理 数组 对象 扁平化 去重 - unique() 拷贝 浅拷贝 深拷贝 copy()函数实现 JS...

  • JavaScript编码能力

    1.多种方式实现数组去重、扁平化、对比优缺点 数组去重 扁平化 2.多种方式实现深拷贝、对比优缺点 3.手写函数柯...

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

    数组扁平化 数组去重 1、ES6 Set 去重 利用对象的属性不会重复这一特性,校验数组元素是否重复 深拷贝

  • 前端高频面试题-编程题

    防抖和节流 深拷贝 数组扁平化 数组去重 单例模式 手写promise 模拟new 实现call apply bi...

  • 相关代码总结

    1.数组去重 2.深拷贝数组或者对象

  • 面试题【Day17】

    本篇绪论 1, 数组去重 2,深、浅拷贝 1,数组去重 方法一: 方法二: 2, 深、浅拷贝 基本数据类型不管是浅...

  • 深拷贝&数组去重

    深拷贝的实现方案 method-1-递归 method-2-JSON 数组去重 method-1--->实现思路:...

  • 放进收藏夹,省下时间睡觉!

    1. 数组去重 2. 深浅拷贝 浅拷贝 深拷贝 假深拷贝 真深拷贝 3. 事件委托 5. 使用push和apply...

  • 前端手写算法题

    1、深拷贝deepCopy 2、对象扁平化 3、数组扁平化 4、手写Promise 5、promise.all方法...

网友评论

      本文标题:数组:扁平化、去重、深拷贝

      本文链接:https://www.haomeiwen.com/subject/adbnyktx.html