当前位置: 首页 > news >正文

ts:数组的常用方法(push、pop、shift、unshift、splice、slice)

前端css中filter的使用

  • 一、主要内容说明
  • 二、例子
    • (一)、push方法(尾添加)
      • 1.源码1 (push方法)
      • 2.源码1运行效果
    • (二)、pop方法(尾删除)
      • 1.源码2(pop方法)
      • 2.源码2运行效果
    • (三)、shift方法(开头删除)
      • 1.源码3(shift方法)
      • 2.源码3运行效果
    • (四)、unshift方法(开头添加)
      • 1.源码4(unshift方法)
      • 2.源码4运行效果
    • (五)、splice方法(增、删、替)
      • 1.源码5(splice方法)
      • 2.源码5运行效果
    • (六)、slice方法(提取)
      • 1.源码6(slice方法)
      • 2.源码6运行效果
  • 三、结语
  • 四、定位日期

一、主要内容说明

本文中,push、pop、shift、unshift、splic方法是对原有数组进行方法转变,使用方法后原数组结构会发生改变。而slice方法只是提取原数组的元素组成新数组,原数组未发生改变。数组的方法主要是数组对象自己使用,其他非数组对象无法使用的。
我们下文举例,每个源码都有数字数组、字符串数组、对象数组,各个使用不同的数组方法,分开看各个源码就可以看各个数组方法的使用。本文只是列举了push、pop、shift、unshift、splice、llice方法,数组方法还有其他的,如forEach、map等方法,笔者会另起博文。

二、例子

(一)、push方法(尾添加)

ts中数组的push方法,是在尾部添加1,或多个元素。

1.源码1 (push方法)

let num_1: number[] = [764, 765, 766];
let str_2: string[] = ["小蜗牛", "764号"];// 向数组中添加元素
num_1.push(767,768);
str_2.push("这个是真的");// 输出修改后的数组
console.log(num_1); // 输出: [764, 765, 766, 767]
console.log(str_2); // 输出: ["小蜗牛", "764号", "这个是真的"]// 定义消息接口
interface Message {name: string;age: number;height: number;
}// 创建消息数组
let mes: Message[] = [{ name: "小七", age: 14, height: 170 },{ name: "小巴", age: 24, height: 160 }
];
console.log("\n 原数组:");
console.log(mes); // 输出: 消息数组
mes.push({ name: "小七", age: 14, height: 170 }); // 添加新的消息对象
console.log(mes); // 输出: 更新后的消息数组

2.源码1运行效果

在这里插入图片描述

(二)、pop方法(尾删除)

ts中数组的pop方法,是删除数组尾部的一个元素。pop方法和push方法用法相反,但需要注意的是,pop只支持删除一个元素,若想删除多个元素可以使用splice方法,这个可以查看后面的内容。

  • pop()的括号里不填值,因为它只删除尾部一个元素,不接收任何参数。

1.源码2(pop方法)

// 定义数组
let num_1 = [764, 765, 766];
let str_2 = ["小蜗牛", "764号"];// 使用 pop 方法删除数组最后一个元素
num_1.pop(); // 删除最后一个元素
str_2.pop(); // 删除最后一个元素// 输出修改后的数组
console.log(num_1); // 输出: [764, 765]
console.log(str_2); // 输出: ["小蜗牛"]// 定义消息接口
let mes = [{ name: "小七", age: 14, height: 170 },{ name: "小巴", age: 24, height: 160 }
];
console.log("\n 原数组:");
console.log(mes); // 输出: 消息数组
mes.pop(); // 删除最后一个消息对象
console.log(mes); // 输出: 更新后的消息数组

2.源码2运行效果

在这里插入图片描述

(三)、shift方法(开头删除)

ts中数组的shift方法,是删除数组头部的一个元素。shift方法和后面的unshift方法用法相反,也需要注意的是,shift方法也只支持删除一个元素,若想删除多个元素可以使用splice方法,splice方法后面的会讲。

  • shift()的括号里不填值,因为它只删除头部一个元素,不接收任何参数。

1.源码3(shift方法)

// 定义数组
let num_1 = [764, 765, 766];
let str_2 = ["小蜗牛", "764号"];console.log("原数组为----" + num_1);
console.log("原数组为----" + str_2);
console.log("使用 shift 数组方法后,从开头删除一个元素-------");num_1.shift(); // 从开头删除一个元素
str_2.shift(); // 从开头删除一个元素// 输出修改后的数组
console.log(num_1); // 输出: [765, 766]
console.log(str_2); // 输出: ["764号"]// 定义消息接口
let mes = [{ name: "小七", age: 14, height: 170 },{ name: "小巴", age: 24, height: 160 }
];
console.log("\n原对象数组为:");
console.log(mes);console.log("使用 shift 数组方法后,从开头删除一个元素-------");
mes.shift(); // 删除第一个消息对象
console.log(mes); // 输出: 更新后的消息数组

2.源码3运行效果

在这里插入图片描述

(四)、unshift方法(开头添加)

ts中数组的unshift方法,是在数组头部添加一个,或多个元素。unshift方法和前面面的push方法类似,区别只是添加元素的位置不同,如unshift头部添加,push尾部添加。

1.源码4(unshift方法)

// 再次定义数组
let num_1 = [764, 765, 766];
let str_2 = ["小蜗牛", "764号"];console.log("原数组为----" + num_1);
console.log("原数组为----" + str_2);
console.log("使用 unshift 数组方法后,从开头增加一个元素-------");num_1.unshift(763); // 从开头添加元素
str_2.unshift("我是"); // 从开头添加元素// 输出修改后的数组
console.log(num_1); // 输出: [763, 764, 765, 766]
console.log(str_2); // 输出: ["我是", "小蜗牛", "764号"]// 定义消息接口
let mes = [{ name: "小七", age: 14, height: 170 },{ name: "小巴", age: 24, height: 160 }
];
console.log("\n原对象数组为:");
console.log(mes);console.log("使用 unshift 数组方法后,从开头增加两个元素-------");
mes.unshift({ name: "月儿", age: 22, height: 163 },{ name: "春雅", age: 21, height: 166 }
); // 从开头添加两个消息对象
console.log(mes); // 输出: 更新后的消息数组

2.源码4运行效果

在这里插入图片描述

(五)、splice方法(增、删、替)

ts的数组方法的splice方法,可以添加、删除、替换元素。splice方法可接收3个参数,如下

let arr;
arr.splice(A,B,C);A----要删除的位置B----删除几个C----删除的部分替换为

当A为0时表示从第一个开始删,当A为1时从第二个开始删。B为2就表示删2个,为1就删1个。C部分编写为与数组相同属性的元素即可,可以有多个元素。

1.源码5(splice方法)

// 定义数组
let num_1 = [764, 765, 766];
let str_2 = ["小蜗牛", "764号"];console.log("原数组为----" + num_1);
console.log("原数组为----" + str_2);
console.log("使用 splice 数组方法后,num_1 从第二个开始删,删 1 个,替换为 777,str_2 从第一个开始删,删 1 个,替换为“我是”-------");num_1.splice(1, 1, 777); // 从索引 1 删除 1 个元素,替换为 777
str_2.splice(0, 1, "我是"); // 从索引 0 删除 1 个元素,替换为“我是”// 输出修改后的数组
console.log(num_1); // 输出: [764, 777, 766]
console.log(str_2); // 输出: ["我是", "764号"]// 定义消息接口
let mes = [{ name: "小七", age: 14, height: 170 },{ name: "小巴", age: 24, height: 160 },{ name: "月儿", age: 22, height: 163 },{ name: "删除使用", age: 0, height: 0 },
];
console.log("\n原对象数组为:");
console.log(mes);console.log("使用 splice 数组方法后,从第 4 个开始删,删 1 个,替换为“{name:春雅,age:21,height:166} 等”-------");
mes.splice(3, 2, { name: "春雅", age: 21, height: 166 },{ name: "夏婉", age: 22, height: 163 }); // 从索引 3 删除 1 个元素,替换为新对象
console.log(mes); // 输出: 更新后的消息数组

2.源码5运行效果

在这里插入图片描述

(六)、slice方法(提取)

ts中数组slice方法,用于提取数组中的元素,组成新的数组,原来的数组结构不会发生改变。slice方法可以接收2个参数,如下:

let arr;
arr.slice(A,B);A----元素提取的开始位置B----元素提取的结束位置,不包含。

A表示元素提取的起始位置,当A=0表示第一个开始提取,A=3表示从第4个开始提取,-2则表示倒数第2个开始。B为提取的结束位置,但不包含B位置,如当B为7时,7表示第八个位置,但只提取到第七个位置,不包含7的第八位置。slice()的括号里也可以填单值,表示起始的提取位置,提取到末尾。也可以不填值,表示全部提取数组元素。

  • 编程语言里,从0开始算一。
  • 提取元素产生新数组,原数组结构不改变。

1.源码6(slice方法)

// 定义数组
let num_1 = [764, 765, 766];
let str_2 = ["小蜗牛", "764号"];console.log("原数组为----" + num_1);
console.log("原数组为----" + str_2);
console.log("使用 slice 数组方法后,从原数组中提取元素作为新数组,num_1 从第 2 个提取到第 3 个(不含),str_2 从第 1 个提取到尾,-------");let num_2 = num_1.slice(1, 2); // 从索引 1 提取到 2(不含)
let str_3 = str_2.slice(0); // 从索引 0 提取到数组末尾console.log(num_2); // 输出: [765]
console.log(str_3); // 输出: ["小蜗牛", "764号"]
console.log("原数组对比是否变化----" + num_1); // 输出: 原数组未变化
console.log("原数组对比是否变化----" + str_2); // 输出: 原数组未变化// 定义消息接口
let mes = [{ name: "小七", age: 14, height: 170 },{ name: "小巴", age: 24, height: 160 },{ name: "月儿", age: 22, height: 163 },{ name: "春雅", age: 21, height: 166 }
];
console.log("\n原对象数组为:");
console.log(mes);console.log("使用 slice 数组方法后,从第 3 个开始提取元素到末尾,生成新数组-------");
let mes_2 = mes.slice(-2); // 从索引 -2 提取到末尾,倒数2个
console.log(mes_2); // 输出: 提取后的新数组console.log("原始值如下,用以对比是否变化-------");
console.log(mes); // 输出: 原数组未变化

2.源码6运行效果

在这里插入图片描述

三、结语

本文只讲了push、pop、shift、unshift、splice、slice的方法,它们是数组的方法,只适用于数组。除这些还有其他数组方法,由于时间问题,便分开编写了。当然一下子大量内容也不好观看,分成几个小模块,小模块分开编写学习,效率也高一些。
由于笔者的能力有限,创作的内容有所不足在所难免,也敬请读者包涵和指出,万分感谢!

四、定位日期

添加文章架构,添加源码1-6,源码已调试完毕,还未添加文字说明。明天继续。
2024-10-26;
23:36;

2024-10-27;
10:09;

相关文章:

ts:数组的常用方法(push、pop、shift、unshift、splice、slice)

前端css中filter的使用 一、主要内容说明二、例子(一)、push方法(尾添加)1.源码1 (push方法)2.源码1运行效果 (二)、pop方法(尾删除)1.源码2(pop方…...

物联网网关确保设备安全

物联网(IoT)网关在确保设备安全方面扮演着至关重要的角色。 作为连接物联网设备和云端或企业系统的中介,物联网网关可以实施多种安全措施来保护设备和数据。 是物联网网关确保设备安全的关键方法: 1. 设备认证和授权 认证&…...

Vue学习笔记(五)

Class绑定 数据绑定的一个常见需求场景式操纵元素的CSS class列表,因为class是attribute,我们可以和其他attribute一样使用v-bind将它们和动态的字符串绑定。但是,在处理比较复杂的绑定时,通过拼接生成字符串是麻烦且易出错的。因此&#xf…...

Nestjs返回格式小结

在 NestJS 中,除了 text/event-stream(用于 Server-Sent Events)之外,还有多种格式的返回方式,具体取决于你的应用需求。以下是一些常见的返回格式及其示例: 1. JSON 格式 Get(json) getJsonResponse(Res…...

【力扣刷题实战】相同的树

大家好,我是小卡皮巴拉 文章目录 目录 力扣题目: 相同的树 题目描述 示例 1: 示例 2: 示例 3: 解题思路 题目理解 算法选择 具体思路 解题要点 完整代码(C语言) 兄弟们共勉 &#…...

Golang | Leetcode Golang题解之第515题在每个树行中找最大值

题目: 题解: func largestValues(root *TreeNode) (ans []int) {if root nil {return}q : []*TreeNode{root}for len(q) > 0 {maxVal : math.MinInt32tmp : qq nilfor _, node : range tmp {maxVal max(maxVal, node.Val)if node.Left ! nil {q …...

Zookeeper 对于 Kafka 的作用是什么?

大家好,我是锋哥。今天分享关于【Zookeeper 对于 Kafka 的作用是什么?】面试题?希望对大家有帮助; Zookeeper 对于 Kafka 的作用是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 ZooKeeper 在 Kafka…...

Thread类及线程的核心操作

一. Thread类的常见构造方法 1. Thread() Thread类无参的构造方法, 用于创建Thread类的实例对象. 2. Thread(String name) 带一个参数的Thread类构造方法, 创建一个线程对象, 并给其命名. [注]: 如果不专门给线程命名, 那么线程默认的名字就是Thread-0, Thread-1, Thread-…...

算法|牛客网华为机试11-20C++

牛客网华为机试 上篇:算法|牛客网华为机试1-10C 文章目录 HJ11 数字颠倒HJ12 字符串反转HJ13 句子逆序HJ14 字符串排序HJ15 求int型正整数在内存中存储时1的个数HJ16 购物单HJ17 坐标移动HJ18 识别有效的IP地址和掩码并进行分类统计HJ19 简单错误记录HJ20 密码验证…...

OpenAI低调发布多智能体工具Swarm:让多个智能体协同工作!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…...

性能之光 年度电竞性能旗舰iQOO 13发布

2024年10月30日,被定义为“性能之光”的年度电竞性能旗舰——iQOO 13正式发布,售价3999元起。iQOO 13作为iQOO 品牌在性能上的又一次深入探索,它像是一束光,引领行业不断拉高性能上限,让用户看到更多的可能性。 iQOO …...

如何避免因不熟悉数据保护法规而受损

在当今数字化时代,数据保护法规的遵守对于企业至关重要。不熟悉新的数据保护法规会导致法律风险增加、财务损失、声誉受损、客户信任下降等多方面的负面影响。其中,法律风险增加尤为严重,因为不符合规定可能引发高额罚款和法律诉讼。企业若未…...

LLaMA Factory 核心原理讲解

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…...

Java题集练习5

Java题集练习5(集合) 1.三种集合差别,集合类都是什么,数据结构是什么,都什么时候用 三者关系 Set集合 Set接口是Collection接口的一个子接口是无序的,set中不包含重复的元素,也就是说set中不…...

操作系统学习笔记-2.3哲学家和管程问题

哲学家问题 问题描述 假设有五位哲学家围坐在一张圆桌旁,每位哲学家面前放有一盘意大利面,他们各自间隔放置一根叉子。哲学家的行为分为“思考”和“进餐”两种状态。为了进餐,哲学家需要同时拿起左手边和右手边的两根叉子。用餐结束后&…...

2023年信息安全工程师摸底测试卷

目录 1.密码算法 2.等级保护 3.密码学 4.安全评估 5.网络安全控制技术 6.恶意代码 7.身份认证 8.资产管理 9.密码分类 10.被动攻击 11.商用密码服务​编辑 12.超文本传输协议 13.数字水印技术 14.信息系统安全设计 15.重放攻击 16.信息资产保护 17.身份认证 …...

ReactOS系统中平衡二叉树。给定地址超导其所属区块MmFindRegion()

系列文章目录 PMM_REGION NTAPI MmFindRegion( PVOID BaseAddress, PLIST_ENTRY RegionListHead, PVOID Address, PVOID* RegionBaseAddress ); 宏函数 //给定地址找到其中所属区块 #define CONTAINING_RECORD(address,type,field) ((type FAR *\(PCHAR)(address)-(PCHAR)(&…...

基于TESSY的单元测试与分类树方法深入解析

在现代软件开发中,单元测试是确保软件质量和可靠性的关键步骤之一。特别是对于嵌入式软件,由于其应用环境的特殊性和高安全性要求,单元测试显得尤为重要。本文将基于《TESSY 用户手册》的内容,详细介绍如何使用TESSY 进行单元测试,并深入探讨分类树方法(Classification T…...

整理了一些大模型的课程,非常详细,大模型零基础入门到精通,收藏我这一篇就够了

目前有多个科普类的大模型课程,这些课程涵盖了从基础理论到实际应用的各个方面。以下是一些主要的科普类大模型课程:复旦大学“大模型开发与赋能”专题讲习班:由复旦大学计算机学院邱锡鹏教授带来的《大模型科普讲解》课程,通过深…...

区块链国赛题目--食品溯源(模块三)

区块链国赛题目–食品溯源(模块三) 任务 3-1:区块链应用前端功能开发 1.请基于前端系统的开发模板,在登录组件 login.js、组件管理文件components.js 中添加对应的逻辑代码,实现对前端的角色选择功能,并测试功 能完整性,示例页面如下: 具体要求如下: (1)有明…...

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...