js 操作数组内容

news2024/12/23 15:04:45

js 操作数组内容

数组添加元素(更改原数组)

push和unshift会返回添加了新元素的数组长度
push从数组最后加入,unshift从数组最前面加入

const arr = ["a", "b", "c"];
arr.push("d"); 				//返回4,arr现在是["a","b","c","d"]
arr.unshift("a"); 			//返回5,arr现在是["a","a", "b", "c","d"]

数组删除元素(更改原数组)

pop和shift会返回被删除的元素
pop删除最后的元素,shift删除第一个元素

const arr = ["a", "b", "c"];
arr.pop(); 				//返回"c",arr现在是["a","b"]
arr.shift();            //返回"a",arr现在是["b"]

在数组末尾添加多个元素(返回一个新数组,不改变原数组)

concat方法可以给数组添加多个元素并返回新数组的拷贝

const arr = [1, 2, 3];
arr.concat(4, 5, 6);
console.log(arr);                   //[1,2,3],arr没有改动
let newArr = arr.concat(4, 5, 6);
console.log(newArr);				//[1,2,3,4,5,6]

如果给concat传一些数组作为参数,它会把这些数组拆分再把拆分后的元素添加到原始数组中。

const arr = [1, 2, 3];
let newArr = arr.concat([4, 5, 6]);
console.log(newArr);				//[1,2,3,4,5,6]
const arr = [1, 2, 3];
let newArr = arr.concat([4, 5],6);
console.log(newArr);				//[1,2,3,4,5,6]

需要注意的是,concat只会拆分直接传给它的数组,并不会拆分数组内的数组

const arr = [1, 2, 3];
let newArr = arr.concat([4,[5,6]]);
console.log(newArr);				//[1,2,3,4,[5,6]]

获取子数组(返回一个新数组,不改变原数组)

如果想要从一个数组中获取子数组,可以用slice。slice有两个参数,第一个参数是子数组的起始位置,第二个参数是它的终止位置。

const arr = [1, 2, 3, 4, 5];
let newArr = arr.slice(2, 4);
console.log(newArr);          //[3,4] 从下标2截取到下标4以内,不包括下标4
const arr = [1, 2, 3, 4, 5];
let newArr = arr.slice(2,-1);
console.log(newArr);          //[3,4] 从下标2截取到下标4以内,不包括下标4

如果省略终止参数,则会返回从当前位置到数组末尾的所有内容

const arr = [1, 2, 3, 4, 5];
let newArr = arr.slice(2);
console.log(newArr);         //[3,4,5] 从下标2截取到数组末尾
const arr = [1, 2, 3, 4, 5];
let newArr = arr.slice(-3);
console.log(newArr);         //[3,4,5] 从下标2截取到数组末尾

从任意位置添加或删除元素(更改原数组)

splice允许对当前字符串做修改,可以从任意一个下标增加或删除元素。
这个方法的
第一个参数是起始修改位置的数组下标
第二个参数是需要删除的元素个数(如果不想删除任何元素就传入0
其他参数则是需要添加到数组中的元素
(简单说第一个参数是起始位置,第二个参数从起始位置删除元素的个数,之后参数是加入的元素)

const arr = [1, 5, 7];
console.log(arr.splice(1, 0, 2, 3, 4));  
//返回[],表示没有删除任何元素,数组变为[1,2,3,4,5,7]
const arr = [1, 5, 7];
console.log(arr.splice(1, 2, 2, 3, 4));  
//返回[5,7],表示下标1以及之后的一个元素删除,数组变为[1,2,3,4]
const arr = [1, 5, 7];
arr.splice(1, 0, 2, 3, 4);
console.log(arr);           //[1,2,3,4,5,7]

数组内的分割和替换

ES6引入一个新方法,copyWithin,它会将数组中一串有序的元素复制到数组的另一个位置,复制的同时会覆盖原来数组中的内容。
第一个参数表明要复制到哪里(目标位置)
第二个参数是从哪里开始复制
最后一个(可选的)参数是复制到哪里结束

const arr = [1, 2, 3, 4];
arr.copyWithin(1, 2);
console.log(arr);           //[1,3,4,4]
//1是复制内容到下标为1的位置,2表示从下标为2的位置开始复制,没有写最后一个参数表示复制到复制到末尾
//由于复制的内容是3和4,会覆盖原来下标1和2,下标3没有被覆盖所以依然是4
const arr = [1, 3, 4, 4];
arr.copyWithin(2, 0, 2);
console.log(arr);         //[1,3,1,3]
//第一个2是复制内容到下标为2的位置,0表示从下标为0的位置开始复制,第二个2是复制结束的下标(下标为2的内容不会被复制)
//由于复制的内容是1和3,会覆盖原来下标2和3
const arr = [1,3,1,3];
arr.copyWithin(0, -3, -1);
console.log(arr);        //[3,1,1,3]
//0是复制内容到下标为0的位置,-3表示从下标为1的位置开始复制,-1是复制结束的下标3
//由于复制的内容是3和1,会覆盖原来下标0和1

用指定值填充数组

ES6还有一个很受欢迎的方法,fill。可以任意指定一个起始位置和结束位置,然后填充这部分的数组值。

const arr = new Array(5).fill(1);
console.log(arr);    //[1,1,1,1,1]
const arr = new Array(5).fill(1);
arr.fill('a');
console.log(arr);  //['a','a','a','a','a']
const arr = new Array(5).fill(1);
arr.fill('b',1)    //下标1之后包括下标1填充为'b'
console.log(arr);  //[1,'b','b','b','b']
const arr = new Array(5).fill(1);
arr.fill('b',2,4);  //下标2和下标3填充为'b'
console.log(arr);   //[1,1,'b','b',1];

数组反转和排序

数组反转

const arr = [1, 2, 3, 4, 5];
arr.reverse();
console.log(arr);   //[5,4,3,2,1]

数组排序

const arr = [5,4,3,2,1];
arr.sort();
console.log(arr);  //[1,2,3,4,5]

sort还允许指定一个排序函数,这个功能不仅方便而且好用。

const arr = [{ name: "Susan" }, { name: "Tom" }, { name: "Peter" }, { name: "Faker" }];
let a = arr.sort((a, b) => {
    if (a.name < b.name)
        return -1
    if (a.name > b.name)
        return 1
    return 0
});
console.log(a);

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/473087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构基础day9

题目&#xff1a;187. 重复的DNA序列 解法1&#xff1a;哈希表 class Solution { public:vector<string> findRepeatedDnaSequences(string s) {vector<string> ans;unordered_map<string, int> mp;int ns.size(), L10;for(int i0; i<n-L; i){ //从开头…

【fluent UDF】warning: unused variable警报:存在未使用的变量

一、问题背景 在编译UDF时&#xff0c;出现如下错误 curing_heat_v3.c: In function ‘iter_ending’: curing_heat_v3.c:105:14: warning: unused variable ‘volume_sum’ [-Wunused-variable] real volume_sum0.0; curing_heat_v3.c:104:14: warning: unused variable ‘…

【Python零基础学习入门篇②】——第二节:Python的常用语句

⬇️⬇️⬇️⬇️⬇️⬇️ ⭐⭐⭐Hello&#xff0c;大家好呀我是陈童学哦&#xff0c;一个普通大一在校生&#xff0c;请大家多多关照呀嘿嘿&#x1f601;&#x1f60a;&#x1f618; &#x1f31f;&#x1f31f;&#x1f31f;技术这条路固然很艰辛&#xff0c;但既已选择&…

网络编程之简单socket通信

一.什么是Socket? Socket&#xff0c;又叫套接字&#xff0c;是在应用层和传输层的一个抽象层。它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。 socket分为流socket和数据报socket&#xff0c;分别基于tcp和udp实现。 SOCK_STREAM 有以下…

苦学58天,最后就这结果......

背景 非计科大专一枚&#xff0c;当初学的机械自动化专业。大学完全可以说是玩过来的&#xff0c;临近毕业开始慌了&#xff0c;毕业后一直没能找到工作&#xff0c;在高中同学&#xff08;211 计科&#xff09;的引领下&#xff0c;入坑程序员&#xff0c;学的软件测试。 从…

Lombok简介

Lombok简介 1、lombok简介2、springboot整合lombok 1、lombok简介 Lombok是一个第三方的Java工具库&#xff0c;会自动插入编辑器和构建工具。Lombok提供了一组非常有用的注解&#xff0c;用来消除Java类中的大量样板代码&#xff0c;比如setter和getter方法、构造方法等。只需…

Vue(简单了解Cookie、生命周期)

一、了解Cookie 类似于对象响应携带数据 输入用户名密码跳转到指定页面 点击指定页面中其中一个按钮跳转到另一个指定页面&#xff08;再不需用输入用户名密码&#xff09; 例如现在很多浏览器实现七天免密登录 简单理解&#xff1a;就是在网站登录页面之后&#xff0c;服务…

新建Django项目

1. 创建项目 使用Django提供的命令&#xff0c;可以创建一个Django项目实例需要的配置项——包括数据库配置、Django配置和应用程序配置的集合。新建Django项目命令的语法格式如下&#xff1a; django-admin startproject 工程名称例如&#xff1a;想要在D:\的pythonProject目…

Mysql 存储过程 / 存储函数

目录 0 课程视频 1 基本语法 1.0 作用 ->在数据库中 封装sql语句 -> 复用 -> 减少网络交互 ->可接收参数返回数据 1.1 创建 1.2 调用 1.3 查看 1.4 删除 1.5 ; 封号结束符 改成 $$ 双刀符合结束语句 -> 因为打包封号结束有冲突 1.6 在cmd 中定义 存储过…

基于 SpringBoot+Vue+Java 的财务管理系统(附源码,教程)

文章目录 一 简介第二.主要技术第三、部分效果图第四章 系统设计4.1功能结构4.2 数据库设计4.2.1 数据库E/R图4.2.2 数据库表 第五章 系统功能实现5.1管理员功能模块 一 简介 财务管理系统的需求和管理上的不断提升&#xff0c;财务管理系统的潜力将无限扩大&#xff0c;财务管…

Postman预请求脚本、测试脚本(pre-request scripts、tests常用工作总结)

文章目录 Postman预请求脚本&#xff08;pre-request scripts工作常用总结&#xff09;Postman预请求脚本Postman测试脚本预请求脚本和测试脚本有什么区别常用工作总结登录接口返回的是Set-Cookie标头 Postman预请求脚本&#xff08;pre-request scripts工作常用总结&#xff0…

Spring Boot配置文件及日志信息

目录 前言&#xff1a; Spring Boot优点 配置文件 配置文件格式 读取配置文件 properties配置文件格式 properties优缺点分析 yml配置文件格式&#xff08;另一种标记语言&#xff09; yml优缺点分析 Spring Boot 不同平台配置文件规则 日志信息 日志的功能 Sprin…

Springboot +Flowable,设置任务处理人的四种方式(一)

一.简介 学习下UserTask 设置用户的三种方式&#xff0c;至于如何设置用户组&#xff0c;下篇文章再聊。 现在&#xff0c;假设我有如下一个简单的流程图&#xff1a; 那么该如何设置这个用户节点的处理人&#xff1f; 二.第一种&#xff1a;指定具体用户 第一种方式&…

电路中噪声来源

电路包括不同的部件和芯片&#xff0c;所有都有可能成为噪声的来源。例如&#xff0c;电阻会带来热噪声&#xff0c;这个噪声为宽频噪声&#xff0c;几乎涵盖所有频率范围&#xff1b;运算放大器其芯片内部会产生噪声&#xff1b;而 ADC产生的量化噪声相较于其他器件&#xff0…

【】右值引用完美转发

文章目录 右值引用和左值引用左值和右值概念左值引用 && 右值引用右值引用使用场景和意义左值引用的使用场景**左值引用的短板:**右值引用和移动语义STL容器增加的接口move函数右值引用的其他使用场景 完美转发万能引用完美转发保持值的属性完美转发的使用场景 右值引用…

【Linux】进程信号 --- 信号产生 信号递达和阻塞 信号捕捉

&#x1f34e;作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;Linux系统编程 文章目录 一、预备知识二、信号产生1. 通过终端按键产生信号1.1 signal()1.2 core dump标志位、核心存储文件 2.通过系统调用向进程发送信号3.由软件条件产生信号3.1 alarm函数和SIGALRM信号…

vue3通过ref拿element弹框中的组件问题

写在<el-dialog>中的组件&#xff0c;在一开始&#xff0c;弹框没有弹出来的时候&#xff0c;<el-dialog>中的组件是没有被渲染出来的&#xff0c;因此在<el-dialog>中使用ref标记某个组件&#xff0c;在el-dialog没有被渲染出来之前去拿的话&#xff0c;是拿…

ml常见代码片段

常用ML代码片段 变换一列 new_df[brand] new_df[prod_name].apply(lambda x: x.split()[0])变换2列 new_df[chip_total_sales] new_df.apply(lambda x: x[total_sales] * x[is_chip], axis 1) # 重要的是axis1groupby 计数&#xff0c;求和&#xff0c;取第一个值&#x…

C语言起源、特性和发展历程

本文从ALGOL 60语言谈起&#xff0c;简述C语言的起源和发展历程&#xff0c;然后对C语言的一些特性做了探讨&#xff0c;最后说说C语言为什么在众多编程语言中&#xff0c;起到了承上启下的作用。 本文介绍以下内容&#xff1a; C语言的起源C语言的发展C语言的特性C语言的重要…

外卖项目优化-01-redis缓存短信验证码、菜品数据

文章目录 外卖项目优化-01课程内容前言1. 环境搭建1.1 版本控制解决branch和tag命名冲突 1.2 环境准备 2. 缓存短信验证码2.1 思路分析2.2 代码改造2.3 功能测试 3. 缓存菜品信息3.1 实现思路3.2 代码改造3.2.1 查询菜品缓存3.2.2 清理菜品缓存 3.3 功能测试3.4 提交并推送代码…