首页 > 其他分享 >JS 列表 - 随笔

JS 列表 - 随笔

时间:2024-03-14 10:23:27浏览次数:20  
标签:index arr JS .# 列表 num new 随笔 size

代码:

class JList {
    #arr = new Array();
    #capacity = 10;
    #size = 0;
    #extendRatio = 2;

    constructor() {
        this.#arr = new Array(this.#capacity);
    }

    /**
     * 获取列表中元素的数量
     * @returns 
     */
    size() {
        return this.#size;
    }

    /**
     * 获取列表总容量
     * @returns 
     */
    capacity() {
        return this.#capacity;
    }

    /**
     * 访问某个索引上的元素
     * @param {number} index 
     */
    get(index) {
        if (index < 0 || index >= this.#size) {
            throw new Error('索引越界');
        }
        return this.#arr[index];
    }

    /**
     * 更新某个位置上的元素
     * @param {number} index 
     * @param {number} num 
     */
    set(index, num) {
        if (index < 0 || index >= this.#size) {
            throw new Error('索引越界');
        }
        this.#arr[index] = num;
    }

    /**
     * 扩容
     */
    extendCapacity() {
        this.#arr = this.#arr.concat(new Array(this.capacity() * (this.#extendRatio - 1)));
        this.#capacity = this.#arr.length;
    }

    /**
     * 向任意位置插入元素
     * @param {number} index 
     * @param {number} num 
     */
    insert(index, num) {
        if (index < 0 || index > this.#size) {
            throw new Error('索引越界');
        }
        if (this.#size === this.#capacity) {
            this.extendCapacity();
        }
        // 将当前处于index位置及之后的元素分别向后移动一位(空出index位,然后再插入)
        for (let j = this.#size - 1; j >= index; j--) {
            this.#arr[j + 1] = this.#arr[j];
        }
        this.#arr[index] = num;
        this.#size += 1;
    }

    /**
     * 向尾部添加元素
     * @param {number} num 
     */
    add(num) {
        this.insert(this.#size, num);
    }

    /**
     * 移除某个位置的元素
     * @param {number} index 
     */
    remove(index) {
        if (index < 0 || index >= this.#size) {
            throw new Error('索引越界');
        }
        let num = this.#arr[index];
        const len = this.#size - 1;
        // 从index位置开始,之后的每个元素依次向前移动一位
        for (let i = index; i < len; i++) {
            this.#arr[j] = this.#arr[j + 1];
        }
        this.#size -= 1;

        return num;
    }

    /**
     * 转为数组进行输出
     * (伪代码)
     * @returns 
     */
    toArray() {
        const n = this.#size;
        const arr = new Array(n);
        for (let i = 0; i < n; i++) {
            arr[i] = this.get(i);
        }

        return arr;

        //// 等同于
        //// return [...this.#arr];
    }
}

 

标签:index,arr,JS,.#,列表,num,new,随笔,size
From: https://www.cnblogs.com/fanqshun/p/18072269

相关文章

  • [数字华容道] Html+css+js 实现小游戏
    [数字华容道]Html+css+js实现小游戏效果图代码预览在线预览地址代码示例<!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title>数字华容道</title> <style> h1{ text-align:center; } .box{ border:......
  • WPS JS生成透视表范例
    //生成透视表 Sheets.Add(undefined,undefined,undefined,undefined); ActiveSheet.Name="数据透视"; Sheets.Item("订单明细").Select(); varReport=ActiveSheet.Name; Range("A1:BO"+a).Select(); Selection.Activate();letpvt2cache=ActiveWork......
  • Flutter中JSON、List和Map之间的相互转换
    JSON转换为Map要将JSON字符串转换为Dart的Map对象,您可以使用Flutter的内置json库。这个库提供了jsonDecode()函数,可以将JSON字符串解析为Dart的Map对象import'dart:convert';StringjsonString='{"name":"John","age":30}';Map<String,dynamic>us......
  • vueusejs实现拖动
    https://www.vueusejs.com/guide/ npmi-D@vueuse/nuxt@vueuse/corepnpmadd-D@vueuse/nuxt@vueuse/core定义变量constcontentParent=ref();定义div<divclass="lg:flexoverflow-autoh-6/6w-[calc(100%+1rem)]"ref=&quo......
  • js判断数组是否包含某个字符串
    方法1Array.includes(): 这个方法返回一个布尔值,表示数组中是否包含指定的元素letlist=['a','ab','abc','d'];console.log(list.includes('abc'))//true方法2Array.indexOf():这个方法返回指定元素在数组中的第一个匹配位置的索引,如果找不到则返回-1。letlist=......
  • [GPT] nodejs 什么情况下可以使用 import 来引入 export 的模块
    在Node.js中,原生并不支持ES6的import语句来引入模块。不过从Node.jsv12开始,通过实验性功能(--experimental-modules)可以使用.mjs扩展名的文件来启用对ES6模块的支持,并使用import语句。新版本Nodejs已移除了--experimental-modules但是,在生产环境中,为了确保兼......
  • Java 简单 bean 与 json 互相转换
    场景说明最近在写一个服务,经常用到调别人接口得到json,然后需要转换为指定bean,记录一下常用工具类引入依赖<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><dependency>......
  • 鸿蒙开发入门实战案例-菜谱列表(附源码)
    昨天分享了鸿蒙的一些基础组件和布局方式,今天直奔主题,做一个菜谱列表,先看效果:这是实际开发中非常常见的列表样式,对初学者来说可能看起来有一些复杂,没关系,我们先从最简单的列表开始,一步一步实现它。昨天说过List列表组件的基本使用方式:List(){ListItem(){T......
  • Java毕业设计 基于SSM jsp房屋租赁系统 房屋出租系统
    Java毕业设计基于SSMjsp房屋租赁系统房屋出租系统SSMjsp房屋租赁系统房屋出租系统功能介绍用户:首页图片轮播搜索登录注册新闻公告新闻公告详情装修广告热门房源房源详情合租整租商业办公普通民宅酒店式公寓全部房源留言交流发布帖子模糊查询用户......
  • Node.js毕业设计安全输血医用网站(Express)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在现代医疗体系中,输血是救治患者的重要手段之一。然而,随着血液资源的日益紧张和血液安全问题的不断凸显,如何确保安全、高效地进行输血成为了一个亟待解决的......