JS 数组的定义+常用方法

JS 数组的定义+常用方法1111 js 定义数组

大家好,欢迎来到IT知识分享网。

一、数组定义的两种方式

1. 系统自带的构造方法

new Array(length/content);

2. 数组字面量

该方式和第一种方式差不多,也相当于new Array()

var arr = [];

数组能使用的所有方法都来源于Array.prototype

二、数组的读和写

数组长度为num

  • arr[num] //不报错 读出来是undefined
  • arr[num] = xxx; //可以溢出写

三、数组的常用方法

数组能使用的所有方法都来源于Array.prototype

(1) 改变原数组

1. push()方法

在数组的末尾添加 任意类型 任意个数 的数据,返回添加数据后的数组长度
在这里插入图片描述
数组的push()方法能被重写

Array.prototype.push = function(){ 
    return 'haha' } 

在这里插入图片描述
重写push方法模拟原push方法

Array.prototype.push = function(){ 
    for(var i = 0;i<arguments.length;i++){ 
    this[this.length] = arguments[i]; } return this.length } 
2. pop()方法

将数组的最后一位元素剪切(删除+返回)出来,传或不传参数都是一样的,只会剪切最后一位
在这里插入图片描述

3. shift()方法

将数组的第一位元素剪切(删除+返回)出来,传或不传参数都是一样的,只会剪切第一位(和pop()方法仅操作位置不同)
在这里插入图片描述

4. unshift()方法

向数组的首部添加 任意类型 任意个数 的数据,返回添加数据后的数组长度(和push()方法仅是添加位置的不同)
在这里插入图片描述
重写unshift方法模拟原unshift方法

Array.prototype.unshift = function(){ 
    var arr = [] for(var i = 0;i<arguments.length;i++){ 
    arr[i]=arguments[i] } arr.push(...this) for(var i = 0;i<arr.length;i++){ 
    this[i]=arr[i] } return this.length } 
5. reverse()方法
6. splice()方法

从数组的指定位置剪切(删除+返回)并添加相应的数据或只添加数组

格式:arr.splice(n,m[,k,....])
-参数n:从第几位开始剪切
-参数m:剪切的长度
-参数k,…:在在切口处要添加的新数据


注意:
数组的方法允许使用负数的下标

计算公式:pos(数组元素下标) = pos > 0 ? 0 : 数组长度

7. sort()方法

(2) 不改变原数组

1. concat()方法

arr.concat(arr1)
将数组arr和arr1拼接成一个新数组并返回,原数组不变

let arr = [1,2,3] let arr1 = [4,5,6] console.log(arr.concat(arr1)) 

在这里插入图片描述

2. toString()方法

arr.toString()
将数组arr以字符串的形式输出,传不传参没区别,不改变原数组
在这里插入图片描述

3. slice()方法

从数组的指定位置截取(不删除 只返回)数据,不改变原数组

格式:arr.slice(n[,m])
-参数n:从该位置开始截取
-参数m:(可选)截取到该位置(不包括),没有参数m则默认截取到数组的末尾

在这里插入图片描述

4. join()方法和split()方法

arr.join(字符串<数字也可以,但字符串是标准语法>)

let str = 'alibaba'; let str1 = 'baidu'; let str2 = 'tencent'; let str3 = 'toutiao'; let str4 = 'aha'; let str5 = 'ohuo'; let strFinal = ''; var arr = [str,str1,str2,str3,str4,str5];//数组是个散列结构,存储在堆内存中 console.log(arr.join('')) console.log(arr.join())//不传参数默认逗号连接 

在这里插入图片描述

str.split(参数)

5.some()方法

用于监听数组中是否有元素满足指定条件,方法会遍历数组中的每个元素并执行逻辑,如果有一个元素满足条件,则不再继续遍历并返回true;如果没有满足条件的元素,则返回false

格式:arr.some(func(currentVal,index,arr),thisVal)
参数1:遍历每个元素时的回调函数
—–参数currentVal:当前遍历到的元素值
—–参数index:可选,当前元素索引值
—–参数arr:可选,当前元素所属数组对象
参数2:可选,可指定回调函数内部的this指向对象,如果没有传或为null,回调函数里的this指向全局window(前提是回调函数不是箭头函数的形式)




some()不会对空数组进行检测

6.every()方法

every() 不会对空数组进行检测

7.reduce()方法

归并,升序遍历数组的所有项,并构建一个最终值,并返回

格式:arr.reduce(callback,[initialValue])
参数1:回调函数,数组中的每一个元素都会依次执行回调函数,不包括数组中被删除或从未被赋值的元素
—–参数previousValue :初始值 或 上一次回调函数的返回值
—–参数currentValue :当前元素
—–参数index:可选,当前元素下标
—–参数arr:可选,当前数组
参数2:可选,初始值,作为第一次调用回调函数时的第一个参数





let a = [4, 2, 3, 3] // reduce方法不改变原数组,返回归并后的值 let b = a.reduce((previousValue , currentValue , index, arr) => { 
    / * 如果有提供初始值,第一次循环时previousValue 值就等于初始值 * 如果没有提供初始值,第一次循环时previousValue 值为arr[0] * 后续循环中,previousValue 为上次循环的返回值 */ console.log(previousValue , currentValue , index, arr) //必须有return 否则下次循环previousValue 是undefined return previousValue + currentValue ; }, 0) console.log(b) 

在这里插入图片描述
无初始值

let a = [4, 2, 3, 3] //reduce方法不改变原数组,返回归并后的值 let b = a.reduce((previousValue , currentValue , index, arr) => / * 如果有提供初始值,第一次循环时previousValue 值为初始值 * 如果没有提供初始值,第一次循环时previousValue 值为arr[0] * 后续循环中,previousValue 为上次循环的返回值 */ console.log(previousValue , currentValue , index, arr) //必须有return 否则下次循环previousValue 是undefined return previousValue + currentValue ; }) console.log(b) 

在这里插入图片描述
可以看到比设置初始值的少了一行输出,是因为没有设初始值,在第一次循环中previousValue为arr[0],currentValue为arr[1],直接进行计算了

由此得出结论:如果没有提供initialValue,reduce 会从索引1的地方开始执行 回调函数,跳过第一个索引;如果提供initialValue,从索引0开始。

8.reduceRight()方法

反向归并

9.filter()方法

用于过滤数组,满足条件的元素会被返回。该方法会返回一个新的数组,不会改变原数组

格式:arr.filter((item,index,arr)=>{return ...})
-参数item:当前元素
-参数index:当前元素位置
-参数arr:数组本身


let arr = [1, 2, 3, 4, 5] let new_arr = arr.filter(item => item > 2) console.log(new_arr) // 结果:[3, 4, 5] 

可以使用filter()方法来移除数组中的undefined、null、NAN等值

let arr = [1, undefined, 2, null, 3, false, '', 4, 0] let new_arr = arr.filter(Boolean) console.log(new_arr) // 结果:[1, 2, 3, 4] 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/119836.html

(0)
上一篇 2025-11-02 18:26
下一篇 2025-11-02 18:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信