JS数组常用方法整理(14种常用方法)

article/2025/10/12 2:48:25

目录

 1.增

1.1 push():

1.2 unshift():

2.删

2.1 pop():

 2.2 shift()

3.改(增、删):

3.1 splice()

4.查

4.1 slice()

 5.将数组转换为字符串:

5.1 toString()

5.2 join()

6.数组拼接 

6.1concat()

7.检测数组中是否包含某一项

7.1 indexOf()

7.2 lastIndexOf()

7.3 includes()

8.数组排序

8.1 reverse()

8.2 sort()


 1.增

1.1 push():

push方法会改变原数组

/*数组.push():向数组的末尾添加元素@params:多个任意类型值@return:新增后的数组长度
*/
let arr = [0,1,2,3],newArr = arr.push(4);
console.log('newArr:', newArr, "|", "arr:", arr)//=> 5,[0,1,2,3,4,5]

结果为:  

1.2 unshift():

unshift方法会改变原数组

/*数组.unshift():向数组开头添加元素@params:多个任意类型值@return:新增后的数组长度
*/
let arr = [1,2,3],newArr = arr.unshift(0);
console.log('newArr:', newArr, "|", "arr:", arr)

结果为:

2.删

2.1 pop():

pop方法会改变原数组

/*数组.pop():删除数组中最后的那项@params:@return:被删除的那项
*/let arr = [0,1,2,3,4,5],newArr = arr.pop();
console.log('newArr:', newArr, "|", "arr:", arr)

结果为:

 2.2 shift()

shift方法会改变原数组

/*数组.shift():删除数组中开头的那项元素@params:@return:被删除的那项
*/let arr = [0,1,2,3,4],newArr = arr.shift()
console.log('newArr:', newArr, "|", "arr:", arr)

结果为:

3.改(增、删):

3.1 splice()

splice方法会改变原数组,并且能进行增删改操作

/*数组.splice(n,m,x):对数组进行增/删/改操作@params:n:从索引n开始(必填)m:向后截取m个元素,没有填写则默认截取到数组末尾(非必填)。x:代替截取掉的部分(非必填)@return:将截取到的部分以新数组的方式返回
*///增:
let arr = [0,1,2,3,4,5,6],newArr = arr.splice(arr.length-1,0,7); //从数组末尾开始向后截取0个元素,并在此插入新元素7
console.log(newArr,arr)// => [],[0,1,2,3,4,5,7,6]//删:
let arr2 = [0,1,2,3,4,5,6],newArr2 = arr2.splice(0,1);//从索引0开始向后截取1个元素
console.log(newArr2,arr2)// => [0],[1,2,3,4,5,6]//改:
let arr3 = [0,1,2,3,4,5,6],newArr3 = arr3.splice(0,1,0.5)//从索引0开始向后截取1个元素,并在此插入元素0.5
console.log(newArr3,arr3)// => [0],[0.5,1,2,3,4,5,6]

4.查

4.1 slice()

slice方法不会改变原数组,以下列出的n和m的情况也适用于splice

/*数组.slice(n,m):查询数组@params:n:从索引n开始(必填)m:查询到索引m为止,不包含m,如果m不填或大于arr.length,默认查询到末尾(非必填)@return:将查找到的元素以新数组的方式返回,如果没有查找到,返回空数组
*///1.当n和m都为正整数:
let arr = [0,1,2,3,4,5],newArr = arr.slice(0,arr.length);//从索引0开始查询到数组末尾的后一项(复制数组)
console.log(newArr,arr)// => [0,1,2,3,4,5],[0,1,2,3,4,5]//2.当n和m为小数时,会先通过parseInt转换为整数在进行查询操作
let arr2 = [0,1,2,3,4,5],newArr2 = arr2.slice(1.9,2.1);//从索引1开始查询到索引为2的元素
console.log(newArr2,arr2)// => [1],[0,1,2,3,4,5]//3.当n是负数时,m不能大于n 否则返回空数组;表示从数组的末尾开始查找,数组最后一项索引为-1,越往前越小(原正数索引-arr.length=当前的负数索引)
let arr3 = [0,1,2,3,4,5],newArr3 = arr3.slice(-3,-1);//从索引-2开始向前查找到索引为-1的元素
console.log(newArr3,arr3);// => [3,4],[0,1,2,3,4,5],//4.当n或m不是有效数字时,先通过parseInt转换为有效数字,转换为NaN则默认为0
let arr4 = [0,1,2,3,4,5],newArr4 = arr4.slice('1.9','哈哈哈');//从索引1开始向后查询到索引为0的元素,返回空数组
console.log(newArr4,arr4)// => [],[0,1,2,3,4,5]let arr5 = [0,1,2,3,4,5],newArr5 = arr4.slice('1.9','3.1');//从索引1开始向后查询到索引为3的元素,返回空数组
console.log(newArr4,arr4)// => [1,2],,[0,1,2,3,4,5]

 5.将数组转换为字符串:

5.1 toString()

toString方法不会改变原数组

/*数组.toString:将数组转换为字符串@params:@return:转换后的字符串
*/let arr = [1,'2',undefined,{name:"Zack"}],newArr = arr.toString();
console.log(newArr,arr)

结果为:  

5.2 join()

join方法不会改变原数组

/*数组.join([string]):将数组以指定分隔符的形式分隔成字符串@params:指定的分隔符(字符串格式)@return:转换后的字符串
*/let arr = [0,1,2,3,4,5],newArr = arr.join('|');
console.log(newArr,arr)

结果为: 

6.数组拼接 

6.1concat()

concat方法不会改变原数组 

/*数组.concat(): 在指定数组后面将多个元素拼接成一个新数组@params:多个任意类型值@return:返回拼接后的新数组
*/let arr = [1,2,3,4],arr2 = [5,6,7],newArr = arr.concat(arr2,'morning',{name:"Zack"})
console.log(newArr,arr,arr2)

 结果为:

7.检测数组中是否包含某一项

7.1 indexOf()

indexOf不会改变原数组

/*数组.indexOf(n,m):检测要检索这一项的值在数组中第一次出现的位置@params:n:要检索的值m:从索引m开始,不填则默认从0开始(非必填)@return:要检索的这一项第一次出现的索引,未找到则返回-1
*/let arr = [0,1,2,3,4,5,'morning',7,'morning'];
console.log(arr.indexOf('morning'))//=>6
console.log(arr.indexOf('morning',7))//=>8

 结果为:

7.2 lastIndexOf()

lastIndexOf方法不会改变原数组 

/*数组.lastIndexOf():查找需要检索的元素在数组中最后一次出现的索引@params:@return: 需要检索的元素最后一次出现的索引,没有则返回-1
*/let arr = [0,1,2,3,4,5,'morning',7,'morning'];
console.log(arr.lastIndexOf('morning'))//=>8

结果为:  

7.3 includes()

    includes方法不会改变原数组

/*数组.includes(n,m):验证数组是否包含某项元素@parmas:n:需要查询的元素m:从索引m开始向后检索,默认为0,如果为负数,且它大于数组长度则会重置为从 0 开始。@return:若指定数组包含返回true否则返回flase
*/let PersonA = {name: "Zack",age: 21}let arr = [0, '1', PersonA, 'morning'];console.log(arr.includes(PersonA));//=> truelet arr2 = [0, '1', PersonA, 'morning'];console.log(arr2 .includes(PersonA,-5));//=> true

结果都为: 

8.数组排序

8.1 reverse()

reverse方法会改变原数组

/*数组.reverse():将数组的元素倒过来排序@params:@return:重新排序后的新数组
*/let arr = [1,2,5,4,3,6,7],newArr = arr.reverse();
console.log(newArr,arr)

结果为: 

8.2 sort()

sort方法会改变原数组

/*数组.sort(fn => fn()):将数组按照指定的顺序进行排序@params:函数(可有可无),如果需要实现多位数正常排序,需要传递函数,并使返回值为a-b(升序)或者b-a(降序),属于冒泡排序机制@return:排序后的新数组
*/let arr = [12,45,6,21,51,81],//升序:newArr = arr.sort((a,b) => (a-b));
console.log(newArr,arr)

结果为:

//降序
let arr = [12,45,6,21,51,81],newArr2 = arr.sort((a,b) => (b-a));
console.log(newArr2,arr)

结果为:


http://chatgpt.dhexx.cn/article/jbCBZSfE.shtml

相关文章

总结: 数组常用的方法

在实际开发当中, 数组和对象使用到最多的; 数组和对象有很多的方法, 这里主要探讨一下: 数组的增删改查数组的排序方式数组转换成其他数据类型的方式ES6数组新增常用的迭代方式 为什么需要数组? 数组可以存入不限数的数据, 并且可以使用下标值进行访问; 数据在数组的内部是有…

hive 宽表变竖表 长表变宽表

1.这是源数据以及需要转化的目标表. 我们的方法是 , 用 GROUP BY按照year分组 , 并且依次提取1月,2月,3月,4月的 num,具体实现 1 2 3 4 5 6 select year, max(case when month1 then money else 0 end) as M1, max(case when month2 then money else 0 end) as M2, max(case w…

【pandas】变形(长宽表变换)

变形 长宽表的变形 长表变宽表就是一个分类变量的多个值展开成多个变量,和哑变量变换有点相似,但不是0-1编码而是其他变量的值。 宽表变长表类似,多个类别可以化在一个分类变量下。 pivot pivot是一种典型的长表变宽表的函数,…

数据库设计--大宽表

宽表的概念 基本概念 宽表从字面意义上讲就是字段比较多的数据库表。通常是指业务主题相关的指标、维度、属性关联在一起的一张数据库表。 由于把不同的内容都放在同一张表存储,宽表已经不符合三范式的模型设计规范,随之带来的主要坏处就是数据的大量冗…

Flink cdc+ doris 大宽表实践~

还没整理好,别慌。 一,业务问题: 多个表关联join(涉及时间维度跨度很长),几乎等同于全量关联,这个时候flink sql join没法做,因为state会无线增大,然后OOM。 二&#xf…

实现MySQL同步数据到ES构建宽表

作者介绍 Ceven,德勤乐融(北京)科技有限公司 邮箱:likailindeqinyuerong.com 前言 CloudCanal 近期提供了自定义代码构建宽表能力,我们第一时间参与了该特性内测,效果不错。开发流程详见官方文档 《CloudCanal自定义代码实时加…

宽表:数据仓库 - “宽表”之争?

昨天在技术交流群里一个问题引发了激烈的讨论,我决定把它记录下来。 问题如下:DWD 中有宽表么? 作为扫盲文章,基础知识我们再普及一下,先介绍下基础相关概念。 数仓分层(来自:个人理解&#xff…

Elasticseach:从微服务架构演变到大宽表思维的架构转变

序言 图示:Elasticsearch 在DB-Engine综合排名第8 Elasticsearch 简称"ES”, 在DB-Engine 综合排名第8,已经持续了相当长的时间,按照当下热度应该会继续保持或者上升一个名次;ES在多数工程师印象中最深刻可能是ELK三件套或者…

9.Flink实时项目之订单宽表

1.需求分析 订单是统计分析的重要的对象,围绕订单有很多的维度统计需求,比如用户、地区、商品、品类、品牌等等。为了之后统计计算更加方便,减少大表之间的关联,所以在实时计算过程中将围绕订单的相关数据整合成为一张订单的宽表…

数仓建模—宽表的设计

宽表的设计 高内聚低耦合 宽表是数仓里面非常重要的一块,数仓是分层的,这是技术进步和时代变化相结合的产物,数仓的分层式为了更好地管理数仓以及更加高效地进行数据开发。 宽表主要出现在dwd 层和报表层,当然有的人说dws 层也有…

基于宽表的数据建模应用

一、业务背景 1.1 数据建模现状 互联网企业往往存在多个产品线,每天源源不断产出大量数据,这些数据服务于数据分析师、业务上的产品经理、运营、数据开发人员等各角色。为了满足这些角色的各种需求,业界传统数仓常采用的是经典分层模型的数…

数据仓库宽表

1. 构建宽表的目的 讲宽表我想从为什么需要宽表入手,而不是一上来就抠概念。因为我觉得一门知识叫什么名字并不是最核心的,关键是搞清楚它的诞生背景以及如何在特定场景用好它。 构建宽表的目的很简单,就是为了"一站式"尽可能多的展示我们需要…

宽表, 窄表, 维度表, 事实表的区别

在数据开发里, 会涉及到一些概念: 宽表, 窄表, 维度表, 事实表 宽表: 把多个维度的字段都放在一张表存储, 增加数据冗余是为了减少关联, 便于查询. 查询一张表就可以查出不同维度的多个字段窄表: 和我们 mysql 普通表三范式相同, 把相同维度的字段组成一张表, 表和表之间关联查…

[转]科普 | 什么是宽表?

科普 | 什么是宽表?一文带你了解 数据仓库宽表_数据宽表_吕归尘0的博客-CSDN博客 一、什么是“宽表”? “宽表”从字面上的意思就是字段(列)比较多的数据库表,是通过关联字段将多个业务主题相关的数据表进行挂接组装…

数仓建模,宽表是什么?如何设计?

数仓建模,宽表是什么?如何设计? 宽表的设计为什么要建设宽表宽表的好处和不足如何设计宽表总结 宽表的设计 其实宽表是数仓里面非常重要的一块,宽表主要出现在dwd 层和报表层,当然有的人说dws 层也有宽表,…

线性代数笔记22——特征值和特征向量

特征向量 函数通常作用在数字上,比如函数f作用在x上,结果得到了f(x)。在线性代数中,我们将x扩展到多维,对于Ax来说,矩阵A的作用就像一个函数,输入一个向量x,通过A的作用,得到向量Ax。…

特征值和特征向量意义

本文转载自https://blog.csdn.net/fuming2021118535/article/details/51339881,版权问题请联系博主删除 在刚开始学的特征值和特征向量的时候只是知道了定义和式子,并没有理解其内在的含义和应用,这段时间整理了相关的内容,跟大家…

特征值和特征向量的几何含义理解

在刚开始学的特征值和特征向量的时候只是知道了定义和式子,并没有理解其内在的含义和应用,这段时间整理了相关的内容,跟大家分享一下; 首先我们先把特征值和特征向量的定义复习一下: 定义: 设A是n阶矩阵&am…

线性代数之——特征值和特征向量

线性方程 A x b Axb Axb 是稳定状态的问题,特征值在动态问题中有着巨大的重要性。 d u / d t A u du/dtAu du/dtAu 的解随着时间增长、衰减或者震荡,是不能通过消元来求解的。接下来,我们进入线性代数一个新的部分,基于 A x …

特征值和特征向量概述-面试必问3(含特征值、向量意义)

特征值和特征向量(Eigenvalues and eigenvectors) 在线性代数中,一个线性变换的特征向量(eigenvector 或者 characteristic vector)是一个非零向量。将线性变换应用在它上面,它最多以一个标量因子进行伸缩…