封装一下数组的基础操作

作者: 自然框架 | 来源:发表于2022-03-31 12:05 被阅读0次
  • 添加类

    • 在开头添加元素:unshift,返回新数组长度, pushA
    • 在末尾添加元素:push,返回新长度,改变数组, push
    • 在任意位置添加:splice(i,0, ...) pushAt
    • 连接两个数组,返回新数组,concat —— add
  • 删除

    • 删除第一个元素,返回被删除元素:shift —— deleteA
    • 删除最后一个元素,返回被删除元素:pop —— deleteZ
    • 按位置删除:splice(i,n),i:位置;n:数量 deleteAt(i,n)
  • 修改

    • 按位置修改
    • 清空后重新添加
    • 交换位置 splice(i,n)
  • 查找

  • 转换

    • 拆分为数组:split
    • 合并为字符串:jion
  • 其他

    • 排序:sort
    • 数组反转:reverse
    • slice(start,end) 切去索引值start到索引值end的数组,不包含end索引的值,返回值是切出来的数组

好像做成表格更清晰

  • 添加类
原名 别名 参数 返回 影响原数组? 功能
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>

这样就可以了。

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

相关文章

  • 封装一下数组的基础操作

    添加类在开头添加元素:unshift,返回新数组长度, pushA在末尾添加元素:push,返回新长度,改变数组...

  • 将Java中的数组进行二次封装成属于我们自己的数组

    将Java中的数组进行二次封装成属于我们自己的数组 我们来简略回顾一下Java数组的基础概念: 数组最大的优点是可...

  • MongoDB-基础

    在了解了SpringData JPA 对MongoDB的封装之后,觉得还是有必要了解一下MongoDB本身的基础操作

  • 笔记---复习数组

    复习一下基础 不喜勿喷 最近在工作中操作数组觉得不爽,决定在复习一下 数组方法 forEach Filter Ma...

  • 数组去重封装

    上次写到了数组去重的几种方式数组去重的几种方式,那么今天就让我们来封装一下数组去重吧。 就在数组原型上封装吧! 源...

  • 数组

    一、无序数组(假设数组元素不重复) 下面我们建立一个类,对数组的检索、插入、删除、打印操作进行封装 无序数组的优点...

  • 机器学习利器之Numpy

    Numpy 多维数组 Numpy 创建N维数组 查看数组属性 shape操作 数组索引和迭代 拼接、分割 基础运算...

  • 封装常用数组操作函数

    1. 数组扁平化 方法一 : 递归迭代数组 方法二 : 通过js原生 falt方法展开数组 方法三 通过正则...

  • slice,map还有channel

    slice slice是针对数组的一种内部封装结构,为了更高效,更好的操作数组 既然说到slice,那么数组是什么...

  • Android JNI 数组操作

    JNI 中有两种数组操作,基础数据类型数组和对象数组,JNI 对待基础数据类型数组和对象数组是不一样的。 基本数据...

网友评论

    本文标题:封装一下数组的基础操作

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