zoukankan      html  css  js  c++  java
  • 浅拷贝和深拷贝以及数组去重示例

    1.浅拷贝

     var obj1 = {
                name: "lsd",
                age: 25,
                skill: ["Java", "H5", "PHP"],
                wife: {
                    name: "wyq",
                    age: 24
                }
            }
            var obj2 = {};
            // 浅拷贝只拷贝第一层属性,引用类型数据地址是相同的---因此存在数据共享问题
            // 遍历obj1
            for (var key in obj1) {
                obj2[key] = obj1[key];
            }
            // console.log(obj1);
            // console.log(obj2);
    
            // 深拷贝---解决数据共享问题
            function deepCopy(source, target) {//source ---数据源 target---目标
                for (var key in source) { //遍历数据源
                    if (source.hasOwnProperty(key)) { //只获取source身上的私有属性
                        if (typeof source[key] == "object") {// 如果为true 表示是引用类型数据
                            // console.log(source[key]);
                            // 拷贝引用类型数据
                            target[key] = Array.isArray(source[key]) ? [] : {}; //判断是数组还是对象
                            deepCopy(source[key], target[key]);//递归---对source[key]一层层拷贝
                        } else {
                            // 拷贝值类型数据
                            target[key] = source[key];
                        }
                    }
                }
            }
            // 测试
            deepCopy(obj1, obj2);
            console.log(obj1);
            obj2.skill.push("UI");
            console.log(obj2);

    测试图示:

     2.数组去重

     //数组去重---去除数组中重复的数据
            var arr = [10, 5, 2, 4, 10, 3, 2, 1, 4, 1, "A", "D", "A"];
            function distinctArray(arr) {
                var newArray = [];
                for (var i = 0; i < arr.length; i++) {
                    //判断newArray中是否存在当前arr[i]这个数据--不存在则将数据写入newArray
                    // indexOf()---数组方法 返回-1表示该数组中没有这个数据
                    if (newArray.indexOf(arr[i]) == -1) {
                        newArray.push(arr[i]);//将数据追到到newAray中
                    }
                }
                return newArray;
            }
            console.log(distinctArray(arr));

    测试图示:

  • 相关阅读:
    数据库的查询笔记
    数据库设计第3级的阶梯:构建表
    数据库使用学习笔记
    index()
    面向对象写法的拖拽
    js面向对象
    laytpl.js 模板使用记录
    面试总结
    JS的基础类型与引用类型
    jQuery两种扩展插件的方式
  • 原文地址:https://www.cnblogs.com/de1921/p/13130327.html
Copyright © 2011-2022 走看看