数组的方法

本文介绍的数组一共有以下这些:

isArray(a)~toString()~toLocaleString()~join()~valueOf()~push()~unshift()~pop()~shift()~reverse()~sort()~concat()~slice()~splice()~copyWithin()~fill()~indexOf(search,start)~lastIndexOf()~reduce()~reduceRight()~map()~forEach()~keys()~values()~entries()~filter()~some()~every()

数组的基本方法

isArray(a):判断a是否是数组

toString():返回由数组中每个值以逗号分隔的字符串,和join()不传参时候相同

[1,2].toString()//"1,2"
[1,null,2,undefined,3].tostring()//"1,,2,,3"

toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。大体上和toString一样

插播toString()和toLocaleString()区别:

//字符串:当数字是三位以上时,会每三位出现一个分隔号
var a = 6666
a.toLocaleString()//"6,666"
a.toString()//"6666"

//日期:
var dt = new Date()
dt.toLocaleString()//"2021/5/26下午2:14:41"
/*
注:
1 这里是当前区域设置的默认格式(用户的“控制面板”中“区域设置”)表示的日期
2 toLocaleString只是用来显示结果给用户;最好不要在脚本中用来做基本计算,因为返回的结果是随机器不同而不同的。
3 使用toString()是保险的方法,它不会因为本地环境改变而改变;
*/
dt.toString()//"Wed May 26 2021 14:14:41 GMT+0800 (中国标准时间)"

join():接收一个参数,用作分隔符,默认是逗号,可用于有length属性的类数组对象上

[1,null,2,undefined,3].join('~')//"1~~2~~3"

//使用join()方法可以创建重复某些字符N次的函数
Array(7).join('lct')//"lctlctlctlctlctlct"

valueOf():返回数组对象的本身

[1,null,2,undefined,3].valueOf()//[1, null, 2, undefined, 3]

插播:JS中的所有类型的 valueOf()的使用 

var o = {
     valueOf: function(){
           return -1;
     }
};
o = +o;//-1
/*
解析:valueOf()方法和toString()方法是一样的,都会在后台进行隐式的调用
在 o = +o时,等号右边就已经调用了valueOf(),相当于 o = +(-1);所以,最终结果o为-1.
*/

 

数组的插入或者移除

push():可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。该数组会改变原数组

[1,2].push(4)//打印的3,是数组的长度,原数组变成[1,2,4]

pop():从数组末尾移除最后一项,然后返回移除的项。该数组会改变原数组

[2,3,5].pop()//打印出5,原数组变成[2,3]
[].pop()//打印出undefiend,不会报错

shift():移除数组中的第一个项并返回该项。该数组会改变原数组


[1,3,4].shift()//打印出1,原数组变成[3,4]
[].shitl()//打印出undefined,不会报错

unshift():可以接收任意数量的参数,在数组前端添加任意个项并返回新数组长度。该数组会改变原数组


[1,3,4].unshift(2,4,6)//打印出6,原数组变成[2,4,6,1,3,4]

//注:在IE7-浏览器中,unshift()方法返回的总是undefined

排序方法

reverse():用于反转数组的顺序,返回经过排序之后的数组;而原数组顺序也发生改变

[1,3,4,5].reverse()
//打印出[5, 4, 3, 1],原数组变成了[5, 4, 3, 1]

sort():按字符串升序排列数组项,sort方法会调用每个数组项的toString()方法,然后比较得到的字符串排序,返回经过排序之后的数组,而原数组顺序也发生改变,它可以接收一个function作为比较函数

[1,7,4,3].sort()//打出[1, 3, 4, 7],原数组也改变了

var a = [1,undefined,'A',4,'lct',7,null,'hh',2]
a.sort()
console.log(a)//[1, 2, 4, "A", "hh", "lct", null, undefined]

拼接方法

concat():将接收到的参数添加到这个数组的末尾,最后返回新构建的数组。不影响原数组。属于浅拷贝

创建子数组方法

slice():接受一个或两个参数,即要返回项的起始和结束位置,最后返回新数组,不影响原数组

[1,2,4,null,undefined,'lct'].slice(0,2)//打出[1,2]

/*
注:
返回这个数组中从start位置到(但不包含)end位置的一个子数组
如果start是负数,则start = max(length + start,0)
如果end是负数,则end = max(length + end,0)
*/

数组删改方法

splice(start,end):用于删除原数组的一部分成员,并可以在被删除的位置添加入新的数组成员,该方法会改变原数回

  • 一个由删除元素组成的数组,或者如果没有删除元素就返回一个空数组
  • 第一个参数start指定了插入或删除的起始位置
  • 如果start是负数,则start = max(length + start,0);
  • 如果start是NaN,则相当于start = 0
  • 第二个参数number指定了应该从数组中删除的元素的个数。
  • 如果省略第二个参数,从起始点开始到数组结尾的所有元素都将被删除。
  • 如果number是负数或NaN或undefined,则number=0,因此不删除元素
  • 如果后面还有更多的参数,则表示这些就是要被插入数组的新元素
    
    var arr = [1,2,4,null,undefined,'lct']
    var arr2 = arr.splice(0,4,7,8)
    arr//原数组变成[7,8,undefined,'lct']
    arr2//返回的是被删除的元素,所以是[1,2,4,null]
    copyWithin():用于从数组的指定位置拷贝元素到数组的另一个指定位置中。可传三个参数
  • 1必填,是复制指定目标索引位置
  • 2选填,元素复制的起始位置。默认为 0 ,如果为负值,表示倒数
  • 3选填,表示结束复制的元素索引位置,默认是数组的长度,注:不包含最后一个索引元素。
[0,1, 2, 3, 4, 5].copyWithin(0, 3, 4)
//把3(包含3)到4(不包含4)位复制到0位,也就是把3复制到0,就变成[3,1,2,3,4,5] 


[1, 2, 3, 4, 5].copyWithin(0, -2, -1)
//把-2(也就是4,包含4)位到-1(也就是5,不包含5)位,复制到0位,变成[4,2,3,4,5]

fill() :用于将一个固定值替换数组的元素。可将一个数组中的部分或者全部内容替换为一个你想要的固定值

     array.fill(value, start, end)
     value替换的值
     start替换的开始的位置,包含开始索引位置
     end替换的结束的位置,不包含结束索引位置

[0,1,2,3,4,5,6].fill('lct', 2, 4)
//[0, 1, "lct", "lct", 4, 5, 6]

数组位置方法

indexOf(search,start):接收search和start两个参数,返回search首次出现的位置,start参数表示该搜索的开始位置,如果没有找到则返回-1(使用严格相等运算符(===)进行比较)

lastIndexOf():与indexOf()同,lastIndexOf()从右向左查找,其它一样

数组归并方法

reduce():方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。需要两个参数。第一个是执行化简操作的函数。第二个(可选)是一个传递给函数的初始值

var a = [1,2,3,4,5];

var sum = a.reduce(function(x,y){
    return x+y
},0);//数组求和,0是sum的初始值
console.log(sum)

/*
如果没有指定后面的0,那么第一次x和y是1和2,第二次x是1+2的结果y是3,第三次x是3+3y是4.....
如果指定了后面的0,那么第一次x就是0和y是1,第二次x就是0+1和y就是2.....
*/

reduceRight():工作原理和reduce()一样,不同的是它按照数组索引从高到低(从右到左)处理数组,而不是从低到高

数组迭代方法

总共有5个方法,每个方法都接收两个参数:

  • 要在每一项上运行的函数

          传入这些方法中的函数会接收三个参数:

                 数组项的值

                 该项在数组中的位置

                 数组对象本身

  • (可选的)运行该函数的作用域对象——影响this的值。
    [1,2,3].map( function (item,index,arr){
    console.log(this)//this指向的是[7,8],如果没有第二个参数指向window
    console.log(arr)//这是数组本身,也就是[1,2,3]
    return item*index},[7,8]);//[0,2,6]

map():数组映射

[1,2,5].map(function(a,b){
      return a+b
   })
 
var arr = [1,2,4]
var c = arr.map(function(a,b){
      return a+b
   })
console.log(c)// [1, 3, 6]
console.log(arr)// [1, 2, 4]
新数组是[1,3,7]

filter():筛选后返回新数组

var arr = [1,2,4]
var c = arr.filter(function(a,b){
      return a+b
   })
console.log(c)// [1, 2, 4]
console.log(arr)//[1, 2, 4]
//新数组是[2,3]

遍历数组:

forEach():用于数组的循环

[1,2,3,'lct'].forEach(function(a,v){
  console.log(a+'|'+v)//循环打印出1|0 2|1 3|2 lct|3
})

keys(),values(),entries()它们都返回一个遍历器对象,可以用for...of循环进行遍历

keys():返回 [键]

values():返回 [值]

entries():返回 [[键,值],[键,值]]

for (let index of ['a', 'b',2,4,5].entries()) {

      console.log(index);

    }

some():遍历整个数组如果有一项是ture,则返回true。并且当且仅当数值中的所有元素调用判定函数都返回false,它才返回false

a = [1,2,3,4,5];
a.some(function(elem, index, arr){return elem%2===0;})//true
[].some(function(){});//false

every():和some用法一样,但是every是每一项都是tuue才返回true,只要有一项是false,则返回false

[].every(function(){});
//true,在空数组上调用every()方法会返回true

总:可以改变原数组的方法总共有9种:包括unshift()、shift()、push()、pop()这4种栈和队列方法,reverse()和sort()这2种数组排列方法,数组删改方法splice()   fill()  copy within()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值