深度遍历数组

创建一个函数,接收一数组为参数,如果数组内元素为一个数组,则将其内部的元素取出作为根数组的元素,如果元素为对象进行深拷贝,最后返回一个新的数组。如:
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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 9,120评论 0 11
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 12,223评论 1 118
  • 在复习过程中,你有没有过这样的感觉:明明知道自己要考研成功,要全力以赴,可一想到有要背那么多的复习资料,就一点动力...
    zzhdzj10阅读 3,471评论 0 0
  • 秋风萧瑟秋草黄, 夜半吹竹惊客酣。 昨晚暖房花换日, 由来遗忘最宜还。 推扉急切将其入, 归宿安然丙梦香。 惨雨镶...
    扑忒阅读 1,488评论 0 2