大家好,欢迎来到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










