JS数组常用方法总结

举报
小妖现世 发表于 2020/07/20 13:07:49 2020/07/20
【摘要】 下午就可以看到自己第一阶段的证书了,希望在显扬的位置有华为的login,期待中……首先我要介绍的是:数组是引用数据类型中的对象(特殊对象)创建一个数组,要开辟一个堆内存,堆内存中存储数组对象中的键值对数组中我们看到的每一项都是属性值,默认的属性名是数字,数字从零开始递增,数字代表当前是第几项,我们把代表位置的数字属性名称为“索引”;数组是以数字作为索引,索引从零开始递增的结构默认存在一个le...

下午就可以看到自己第一阶段的证书了,希望在显扬的位置有华为的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如果有这个参数,该参数会默认称为该函数的第一项

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。