美文网首页
深度遍历数组

深度遍历数组

作者: Dolores_520 | 来源:发表于2017-08-28 14:27 被阅读0次
    创建一个函数,接收一数组为参数,如果数组内元素为一个数组,则将其内部的元素取出作为根数组的元素,如果元素为对象进行深拷贝,最后返回一个新的数组。如:
    func([1,2,[3,4],{age:1},5]) = [1,2,3,4,{age:1},5];
    func([1,2,[3,4,[5,6],7],{age:1},8,[9,10]]) = [1,2,3,4,5,6,7,{age:1},8,9,10];
    
    刚看到这道题,咦,这不是对数组的判断和递归么,实现代码如下
     var newArr = [];
     function func(arr) {
        for(var i = 0; i < arr.length; i++) {
            if(arr[i] instanceof Array ) {
                func(arr[i]);
            } else {
                newArr.push(arr[i]);
            }
        }
        return newArr;
     }
    
    朋友看了后说有问题,没有实现对对象的深拷贝

    深拷贝 : 简单理解即将A拷贝给B,修改A的值,B不发生变化

    对象的深拷贝
    function deepCopy(source) {
        var result={};
        for(var key in source) {
           result[key] = typeof source[key]=='object'? deepCoyp(source[key]): source[key];
        }
        console.log(result);
        return result;
    }
    
    数组重新遍历
    var newArr = [];
    function func(arr) {
        for(var i = 0; i < arr.length; i++) {
           if(Array.isArray(arr[i])) {
               func(arr[i]);
           } else if((typeof arr[i] == "object") && !Array.isArray(arr[i])) {
               newArr.push(deepCopy(arr[i]));
           } else {
               newArr.push(arr[i]);
           }
        }
        return newArr;
    }
    

    相关文章

      网友评论

          本文标题:深度遍历数组

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