ES6的基础知识每天学一点Vue3

封装一下数组的基础操作

2022-03-31  本文已影响0人  自然框架

好像做成表格更清晰

原名 别名 参数 返回 影响原数组? 功能
unshift pushA 一个/多个新元素 新数组长度 在开头添加元素
push push 一个/多个新元素 新数组长度 在末尾添加元素
splice pushAt i, 新元素… 新数组长度* 在位置i开始添加新元素
concat 不用 多个数组 返回一个新数组 合并两个、多个数组

换成别名是不是更好记了呢。

原名 别名 参数 返回 影响原数组? 功能
shift deletaA 被删除的元素 删除第一个元素
pop deleteZ 被删除的元素 删除最后一个元素
splice deleteAt i,n 被删除的元素 删除指定位置i开始的n个元素

继承 Array

首先继承 Array 做一个子类,这样可以把自己做的函数挂在子类的原型上面,而不是Array 上面。

虽然多了一层,但是不会影响 Array 结构。


/**
 * 继承 Array,做一个子类
 */
 export default class BaseArray extends Array {
  constructor (_info) {
    // 调用父类的 constructor()
    super()
    // 设置初始值
    if (Array.isArray(_info)) {
      this.push(..._info)
    } else {
      this.push(_info)
    }
  }
}

挂上添加类的函数

  /**
   * 在开头添加,封装 unshift
   * @param {*} val 一个或者多个新元素
   * @returns 返回新数组的长度
   */
  pushA() {
    return this.unshift(...arguments)
  }
  /**
   * 在指定位置i开始添加新元素,封装 splice
   * @param { int } i 从 0 开始的位置
   * @param { * } val 要添加的新元素
   * @returns 返回新数组的长度
   */
  pushAt(i, val) {
    console.log(arguments)
    const tmp = Array.from(arguments).slice(1)
    this.splice(i, 0, ...tmp)
    return this.length
  }

感觉还是蛮简单的。

  /**
   * 删除第一个元素
   * @returns 返回被删除的元素
   */
  deletaA() {
    return this.shift()
  }
  /**
   * 删除从指定位置 i 开始的 n 个元素
   * @param {*} i 从 0 开始的位置
   * @param {*} n 删除多少个元素
   * @returns 返回被删除的元素
   */
  deleteAt(i, n) {
    return this.splice(i, n)
  }
  /**
   * 删除最后一个元素
   * @returns 返回被删除的元素
   */
  deleteZ() {
    return this.pop()
  }
  /**
   * 交换两个数组元素的位置
   * @param { int } i1 
   * @param { int } i2 
   */
  swap(i1, i2) {
    const tmp = this[i1]
    this[i1] = this[i2]
    this[i2] = tmp
  }

使用

  const tmp = new BaseArray(info)
  const test = reactive(tmp)
  
  添加类:<br>
  <button type="" @click="test.pushA({name:'pushA', age: 15})">在开始位置添加</button>
  添加一个元素,在开头
  <br><br>
  <button type="" @click="test.pushAt(2, {name:'pushAt', age: 65})">在指定位置添加</button>
  添加一个元素,在指定位置 2 添加一个
  <br><br>
  <button type="" @click="test.pushAt(3, {name:'pushAt11', age: 75}, {name:'pushAt12', age: 76})">在指定位置添加</button>
  添加一个元素,在指定位置 3 添加多个
  <br><br>
  <hr>
  删除类:<br>
  <button type="" @click="test.deletaA()">删除第一个</button>
  删除第一个
  <br><br>
  <button type="" @click="test.deletaZ()">删除最后一个</button>
  删除最后一个
  <br><br>
  <button type="" @click="test.deletaAt(2, 3)">删除指定位置</button>
  删除指定位置 2 ,开始 3个
  <br><br>

这样就可以了。

看着还是头疼,先这样把,以后再完善。

上一篇 下一篇

猜你喜欢

热点阅读