JS数组常用方法总结
下午就可以看到自己第一阶段的证书了,希望在显扬的位置有华为的login,期待中……
首先我要介绍的是:
数组是引用数据类型中的对象(特殊对象)
创建一个数组,要开辟一个堆内存,堆内存中存储数组对象中的键值对
数组中我们看到的每一项都是属性值,默认的属性名是数字,数字从零开始递增,数字代表当前是第几项,我们把代表位置的数字属性名称为“索引”;数组是以数字作为索引,索引从零开始递增的结构
默认存在一个length属性,代表数组的长度(有多少项)
数组中存在的每一项可以是任何数据类型
arr.length-1:最后一项的索引
arr[arr.length]:x:向数组末尾追加一个新项
把数组当做普通对象,基于for in遍历数组中的每一项
for(let key in arr){
console.log(arr[key]);
}
基于delete删除数组中的某一项(把它当做普通对象操作),键值对可以删掉,但是length并不会跟着改变,一般数组删除不用
基于arr.length--可以实现删除最后一项
数组中常用的内置方法:
console.dir(Array.prototype);
关于数组的增删改:
push : 向数组末尾最加元素
@params:参数个数不固定,类型也不固定,都是向数组末尾一次追加的内容
@return:
[number]新增后数组的长度
原始数组改变
基于对象键值对操作:arr[arr.length]=xxx;
pop :删除数组最后一项
@params:无
@return:删除某一项内容
原始数组改变
arr.length--; 删除最后一项
shift : 删除数组第一项
@params:无
@return:被删除的那一项内容
原始转数组改变
unshift : 向数组开始位置新增内容
@params:个数不定、类型不定,一次增加内容
@return:[number]新增后数组的长度
原始数组改变
splice:实现数组的增删改
splice(n,m):从索引n项开始,删除m个
splice(n,m,x..):从索引n开始,删除m个,用x或者更多的值替换删除的内容,返回结果是一个数组,存储删除的内容
splice(n,0,x..):从索引n开始,一个都不删除(返回结果是空数组),把x...或者更多的值插入到索引n的前面
splice(0):从索引零开始,删除到末尾(清空原来数组,把原来数组中的每一项都存放到新数组中)
关于数组查询和拼接:
slice(n, m) : 实现数组的查询,从索引n开始,查找到索引为m处(不包含m),查找到的内容以新数组的方式返回,原始数组不变
第二个参数不写是直接查找到数组末尾
slice(0):可以理解为把原始数组的每一项都查找到,以新数组返回,实现“数组克隆”:得到的新数组和原始数组是两个不同的数组(两个不同的堆),堆中存储的内容是一致的
concat:实现数组拼接,把多个数组(或者多个值)最后拼接为一个数组,原始的数组都不会改变,返回结果是拼接后的新数组
转换为字符串:(原始数组不会改变)
toString() : 把数组中的每一项按照“逗号分隔”,拼接成对应字符串
join([char]) : 指定分隔符
如果这个字符串能够变为js表达式执行,则代表数组中每一项的求和=>eval
验证是否包含某一项的:
indexOf / lastIndexOf:获取当前项在数组中第一次 / 最后一次出现位置的索引
基于这个特征来验证数组中是否包含某一项
arr.indexOf(40)>-1 //数组中包含这一项
includes:验证数组中是否包含这一项,包含true,不包含false
关于排序的:
reverse():把原始数组倒过来排列,返回的结果是排列后的新数组,原始数组改变
sort:默认按照从小到大排序,默认不是按照每一项的数值大小排序,而是按照每一项的每一个字符编码进行比较排序的;sort支持传递回调函数,基于自定义的排序规则,进行排序
arr.sort((a,b)=>{a-b}):升序
arr.sort((a,b)=>{b-a}):降序
关于数组迭代的方法:(遍历数组中每一项的)
forEach([函数]):遍历数组中的每一项(数组中有多少项,函数会相继被执行多少次),每一次执行函数,都可以在函数中获取到当前遍历的这一项和对应的索引
arr.forEach(function(item,index){
// item:当前遍历这一项的内容
// index:当前项的索引
});
Array.prototype.map(callback[ , thisArr])
map : forEach是不支持返回值的,而map可以在forEach的基础上支持返回值,不会改变原来的数组,执行的返回结果是修改后的新数组
arr.map(function(item, index){
// 数组中有多少项,此函数就循环几次
//item:当前循环这一次的值
// index:当前项的索引收录
//函数中返回啥,都是把数组中当前项替换成啥
return '';
});
Array.prototype.filter(callback[ , thisArr])
filter:把回调函数return值复制一份放到新数组中
let arr=[1,2,3,4,5];
let res=arr.filter(item=>{
return item >2
})
callback执行结果是true就返回当前元素,false则不返回,返回的所有元素组合在一起生成一个新数组,并返回,如果没有符合的元素,则返回空数组
Array.prototype.reduce(callback(accumulator,currentValue[, index, [, array]])[,initialValue])
reduce:方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值
let res=arr.reduce((cur,next)=>{
//cur上一次处理结果
// 如果没有给reduce传递第二参数:第一次cur的初始值是数组第一项,next是数组的第二项
//传递了第二个参数:第一次n的初始值就是这个参数值,next是第一项
//上一次迭代中返回的是啥,这一次cur就是啥
//next:数组中每次遍历的这一项
return cur+next
}, 100)
100如果有这个参数,该参数会默认称为该函数的第一项
- 点赞
- 收藏
- 关注作者
评论(0)