栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

深浅拷贝、变量值快速交换、数组常用方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

深浅拷贝、变量值快速交换、数组常用方法

深浅拷贝
    + 复制数据的形式
    + 复制的数据: 非函数数据

  复制数据的几种级别

    1. 赋值
      => 把一个变量存储的值复制一份给到另一个变量
      => 基本数据类型赋值以后两个变量没有关系
      => 复杂数据类型赋值以后, 两个变量操作同一个存储空间
    2. 浅拷贝
      => 制作一个和原始数据一模一样的数据结构
      => 把原始数据结构中的内容一个一个的复制到新数据结构中
      => 只能拷贝一层数据结构
    3. 深拷贝
      => 按照浅拷贝的方式来继续进行第二层数据的拷贝
      => 当我拷贝第一层数据的时候
        -> 如果遇到某一个 key 保存的值是复杂数据类型
        -> 进入到这个复杂数据类型内再次拷贝
 var o1 = {
            name: 'Jack',
            age: 18,
            gender: '男',
            info: {
              weight: 180,
              height: 180,
              address: {
                city: '北京'
              }
            },
            hobby: {
              ball: ['篮球', '足球', '羽毛球'],
              sport: ['跑步', '游泳']
            }
          }
    
    var o2 = {}
    //浅拷贝
    for (i in o1) {
        o2[i] = o1[i]
    }
    //o1中的info、hobby、info.address地址空间都赋值给o2,
    //修改o2的其他属性不会改变o1,但修改上述的几个对象的值仍然会同时改变o1中的值
    //因为浅拷贝只拷贝一层,一层里的对象的地址空间指向仍然一样

    function deepCopy(origin, target) {
     //深拷贝   origin->原始对象、target->要创建的目标对象
            for (var k in origin) {
              if (Object.prototype.toString.call(origin[k]) === '[object Array]') {
                target[k] = []
                deepCopy(origin[k], target[k])//递归实现深拷贝
              } else if (Object.prototype.toString.call(origin[k]) === '[object Object]') {
                target[k] = {}
                deepCopy(origin[k], target[k])
              } else {
                target[k] = origin[k]
              }
            }
          }
变量值的快速交换
var a = 10,b = 20
a = [b, b = a][0]//a=20,b=10

//通过数快速交换数据 通过ES6语法的析构赋值

数组常用方法
  1. push()

    • 语法: 数组.push(数据, 数据, …)
    • 作用: 向数组的末尾追加指定的数据
    • 返回值: 追加数据后最新的数组的长度
  2. unshift()

    • 语法: 数组.unshift(数据)
    • 作用: 向数组的最前面插入数据
    • 返回值: 插入数据后最新的数组的长度
  3. pop()

    • 语法: 数组.pop()
    • 作用: 删除数组的最后一个数据
    • 返回值: 被删除的数据
  4. shift()

    • 语法: 数组.shift()
    • 作用: 删除数组最前面一个数据
    • 返回值: 被删除的数据
  5. reverse()

    • 语法: 数组.reverse()
    • 作用: 反转数组
    • 返回值: 反转以后的数组
  6. sort()

    • 语法:
    • 数组.sort()
      
    • 数组.sort(function (a, b) { return a - b }) 升序
      
    • 数组.sort(function (a, b) { return b - a }) 降序
      
    • 作用: 对数组进行排序
    • 返回值: 排序后的数组
  7. splice()

    • 语法:
    • 数组.splice(开始索引, 多少个)
      
    • 数组.splice(开始索引, 多少个, 要插入的数据)
      
    •  注意: 从哪一个索引开始截取, 从哪一个索引插入
      
    • 作用: 截取数组部分内容, 并插入新的内容
    • 返回值: 一个新的数组
    • 你截取的所有内容放在这个新数组内
      
  8. slice()

    • 语法: 数组.slice(开始索引, 结束索引)
    • 注意: 包前不包后, 包含开始索引, 不包含结束索引
    • 注意: 可以填写负整数, 等价于 length + 负整数
    • 作用: 从数组内截取部分数据(不会改变原始数组, 而是复制出来)
    • 返回值: 必然是一个新数组
    • 数组内就是截取出来的部分数据
  9. join()

    • 语法: 数组.join(‘连接符’)
    • 作用: 把数组内的每一项用连接符连接成一个字符串
    • 返回值: 连接好的字符串
  10. concat()

    • 语法: 数组.concat(数组2, 数据)
    • 作用: 把参数的数组展开拼接到原始数组内
    • 返回值: 拼接好的数组
  11. indexOf()

    • 语法:
    • 数组.indexOf(数据)
    • 数组.indexOf(数据, 开始索引)
  12. lastIndexOf()

    • 语法:
    • 数组.lastIndexOf(数据)
    • 数组.lastIndexOf(数据, 开始索引)
    • 作用: 从后向前检索数组中第一次出现该数据的索引位置
    • 返回值: 是一个数字
    • 如果检索到的该数据, 那么就是该数据第一次出现的索引位置
    • 如果没有该数据, 那么就是 -1
暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1016708.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号