Array对象的方法

Array

Array对象定义有两种格式,一种是数组字面量(var arr = []),另一种是调用构造函数生成的数组(var arr =  new Array())

我们在平时开发的时候,一般使用的是数组字面量。

var arr = [];  //数据原型

var arr =  new Array();  // 对象,比较耗内存

new关键字的使用  ------  除了在需要实例化一个对象,或罕见的需要延时加载数据的情况外,你基本上不需要使用new关键字。在Javascript里分配大量的new变量地址是一项很慢的操作,为了效率起见,你应该始终使用对象符号。

Array对象的方法的有很多种,有些功能相似,经常被搞混淆,现整理一下所有的方法: 

1.toString()/toLocalString()  ------- 把数组转化成字符串

这俩个方法都是将数组转化成字符串,但还是有区别的,主要体现在时间和超过三位数的数字上,

  时间格式:toString转化为标准格式,toLocaleString会转化为本地格式

  数值:toLocaleString会将长度超过三位数的数值从右边开始每三位用逗号间隔开,toString不会

var arr = [124578,new Date(),"1sfgfg"]

arr.toString()
//"124578,Fri Oct 15 2021 10:06:24 GMT+0800 (中国标准时间),1sfgfg"

arr.toLocaleString()
//"124,578,2021/10/15上午10:06:24,1sfgfg"

顺便了解一下:

     toLocaleDateString()    

       arr[1].toLocaleDateString()    //    "2021/10/15"

     toLocaleTimeString() 

        arr[1].toLocaleTimeString()   //    "上午10:17:27"

2.join() ------- 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。 

var arr = [124578,"dsd","1sfgfg"]
var str = arr.join("-")
console.log(str) //124578-dsd-1sfgfg


//在textarea 中换行展示 ['雅思','托福','成人英语']
let arr = ['雅思','托福','成人英语']
let str = arr.join('\r\n')
console.log(str)

3.pop() -------  删除并返回数组的最后一个元素

pop相当于数据结构中的pop出栈,后进先出。打个比方,a,b,c,d排队进入只有一个入口的管道,要出来只能依次d,c,b,a出来。

   pop() 方法将删除 array 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则不改变数组,并返回 undefined 值。

var arr = [124578,dsd,"1sfgfg"]
var str = arr.pop()
console.log(str) //1sfgfg

4.push(ele1,ele2,....,eleX) ------- 向数组的末尾添加一个或更多元素,并返回新的长度。

var arr = [124578,"dsd","1sfgfg"]
var num = arr.push("true",987,null,NaN)
console.log(num) // 7

5.shift()  ------- 删除并返回数组的第一个元素

shift 和 pop 就相对于一个组合,shift负责开头,pop负责末尾。都不会创建新的数组,而是直接修改原有的数组

   shift () 方法将删除 array 的第一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则不改变数组,并返回 undefined 值。

var arr = ["dsd",124578,"1sfgfg"]
var str = arr.shift()
console.log(str) //dsd

6.unshift()  ------- 向数组的开头添加一个或更多元素,并返回新的长度。 

同样 unshift 和 push 就相对于一个组合,unshift负责开头添加,push负责末尾添加。都不会创建新的数组,而是直接修改原有的数组。

var arr = ["dsd",124578,"1sfgfg"]
var num = arr.unshift(true,{"name":"jqn"})
console.log(num) //5

7.slice(start,end) ------- 从某个已有的数组返回选定的元素 

 start : 必选,规定从何处开始,0表示第一个元素,如果为负数,表示从数组尾部开始算起的位置,-1为最后一个元素,-2为倒数第二个位置;

 end : 可选,规定从何处截止,不包含该处的元素,如果没有设置end值,就表示从起始位置到数组结尾的元素

 注意:slice不是改变原有的数组,而是新建一个新的数组

平时开发中我们要获取数组的最后一个元素,就可以使用 arr.slice(-1) 去获取。

var arr = ["dsd",124578,"1sfgfg",true,{"name":"jqn"}]
var newArr = arr.slice(2) // 或者 arr.slice(-3) 
console.log(newArr) //"1sfgfg",true,{"name":"jqn"}

 8.splice(start,delnum,addele1,addele2,...,addeleX) ------- 插入、删除或者替换一个数组元素

  start : 必需,为添加/删除项目的起始位置,如果为负数,表示从数组尾部开始算起的位置,-1为最后一个元素,-2为倒数第二个位置;

  delnum : 必需,删除数组元素的个数,如果设置为 0,则不会删除;

  addele : 可选,为需要添加的数组元素

  注意:splice改变了原有的数组,同时返回删除的元素,如何没有删除元素,则返回一个空数组

var arr = ["dsd",124578,"1sfgfg",true,{"name":"jqn"}]
var newArr = arr.splice(2,1)  
console.log(newArr) // ["1sfgfg"]

var arr = ["dsd",124578,"1sfgfg",true,{"name":"jqn"}]
var newArr = arr.splice(2,1,"abc","def")  
console.log(newArr) // ["1sfgfg"]

9.concat(arr1,arr2,...arrX) ------- 连接两个或更多的数组,并返回结果

 concat不会改变原有数组,而是返回一个新的数组

 var arr = ['dsd', 124578]
 var arr2 = ['abc', 'def', true]
 var arr3 = arr.concat(arr2)
console.log(arr3) // ['dsd', 124578, 'abc', 'def', true]

10.sort(sortFn) ------- 对数组进行排序操作,会改变原来的数组

  sortFn : 可选,对数组排序的函数,如果没有定义此函数,将按照数组元素的首字符编码的顺序进行排序

  sort该方法会改变原来的数组,而不会创建新的数组。

var arr=[11,13,45,23,56,78,43,98,5,8,6]
console.log(arr.sort()) // [11, 13, 23, 43, 45, 5, 56, 6, 78, 8, 98]

arr.sort((a,b)=>{ return a-b}) // [5, 6, 8, 11, 13, 23, 43, 45, 56, 78, 98]

arr.sort((a,b)=>{ return b-a }) // [98, 78, 56, 45, 43, 23, 13, 11, 8, 6, 5]


顺便了解一下: 随机排序

arr.sort(function() {return Math.random() < 0.5 ? 1:-1})

11.reverse() ------- 颠倒数组中元素的顺序 ,会改变原来的数组

var arr=[11,13,45,23,56,78,43,98,5,8,6]
console.log(arr.reverse()) // [6, 8, 5, 98, 43, 78, 56, 23, 45, 13, 11]

12.indexOf(searchvalue,fromindex) ------- 查找元素首次出现的位置

第一个参数为要检索的值,第二个参数为开始检索的位置,从前向后检索,返回首次出现的位置,找不到返回-1

var arr=["xiao",1,2,5,1,4]
console.log(arr.indexOf(1)) // 1

console.log(arr.indexOf(1,2)) // 4

13.lastIndexOf(searchvalue,fromindex) ------- 从后向前检索返回从后往前第一次出现的位置

第一个参数为要检索的值,第二个参数为开始检索的位置,从后向前检索返回从后往前第一次出现的位置,找不到返回-1

var arr=["xiao",1,2,5,1,4]
console.log(arr.lastIndexOf(1)) // 4

console.log(arr.lastIndexOf(1,-3)) // 1

14.find()

两个参数,第一个为回调函数,第二个为可选参数。表示回调函数中this的指向,假如没有的话,this指向为undefined。找到第一个符合条件的元素并返回。

var arr=[1,2,3,4,5];
arr.find(function(item,index,target){
    return item > this
},3);//4

15.findIndex() 

跟find用法一样,不过返回的是索引值,而不是元素的值

var arr=[1,2,3,4,5];
arr.findIndex(function(item,index,target){
    return item > this
},3);//3

16.map()

对应原数组生成对应的新数组,不改变原数组。 

var arr=[1,2,3,4,5];
var newArr = arr.map(function(item,index,target){
   return item + 1
})
console.log(newArr) //[2,3,4,5,6]
console.log(arr);//[1,2,3,4,5]

17.array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

 该参数有两个参数,第一个为回调函数,必填。

        total      必需。初始值, 或者计算结束后的返回值。

        currentValue     必需。当前元素

        currentIndex     可选。当前元素的索引

        arr        可选。当前元素所属的数组对象。

  第二个为可选参数。

var arr = [15.5, 2.3, 1.1, 4.7];
arr.reduce(function(pre,item,index,arr){
    console.log(item,index)
    return pre + item
},0) //23.6

有参数0 时,索引从0开始

一般用于数组求和。 

18.reduceRight() 

同 reduce ()用法一样,只不过是从数组末尾向前遍历,不改变原数组,对于空数组是不会执行回调函数的

var arr = [15.5, 2.3, 1.1, 4.7];
arr.reduceRight(function(pre,item,index,arr){ console.log(item,index)
    return pre + item
},0) //23.6 

有参数0时,索引从arr.length-1开始,无参数0 时,从 arr.length-2开始

19.every() 

判断数组中是否所有的元素都满足条件。全满足时,返回true,否则返回false。

var arr=[1,2,3,4];
arr.every(function(item,index,target){
    return item > 3
});//false

20.some()

判断数组中是否有元素满足条件,有元素满足条件,则返回true,否则返回false。回调函数的参数同上。

var arr=[1,2,3,4];
arr.some(function(item,index,target){
    return item > 3
});//true

21.filter() 

对数组进行过滤,遍历数组,依次将返回值为true的元素放在一个新的数组中,不改变原数组。回调函数的三个形参分别表示当前元素,当前元素的索引,数组。不会改变原数组。

var arr=[1,2,3,4,5,6];
var newArr = arr.filter(function(item,index,target){
      return item > 2
})//
console.log(newArr) // [3,4,5,6] 
console.log(arr);//[1,2,3,4,5,6]

22.forEach()

遍历数组,依次操作元素。不改变原数组,简洁了对数组的遍历。

var arr=[1,2,3,4,5,6],
     temp=[];
arr.forEach(function(item,index,target){
    temp.push(item);
})
console.log(temp);//[1,2,3,4,5,6]
console.log(arr);//[1,2,3,4,5,6]

23.includes()

两个参数,第二个为可选参数。includes(value,start) 判断是否包含某元素。start为起始位子。

var arr=[1,2,3,4,5];
arr.includes(3,3);//false
arr.includes(3);//true

24.Array.from()

将'类数组'转化为真正的数组

// 转化类数组对象
let arrayLike = {
    '0':1,
    '1':2,
    '2':3,
    length:3
}

let arr1 = Array.from(arrayLike);
console.log(arr1); // [1,2,3]

// 转化NodeList对象
let ps = document.querySelectorAll('p');
Array.from(ps).foreach(function(p){
  console.log(p)
})

// 转化argument对象
function foo (){
 var args = Array.from(arguments);
}

25. Array.of() 

用于将一组值,转换为数组

Array.of(3,11,1) // [3,11,1]

26. copyWithin()

在当前数组内部,将指定位置的成员复制的指定位置

Array.prototype.copyWithin(target, start = 0, end = this.length)

target 目标位置  start 开始位置  end 结束位置 返回新数组 

// 将第3到最后一位成员,即[4,5],复制到第0位,替换掉[1,2],得到新数组[4,5,3,4,5]
[1, 2, 3, 4, 5].copyWithin(0, 3) 
// [4,5,3,4,5]  

27. 数组中某个值复制N遍

let arr = ['$']
Array(5).fill(arr[0])

//['$', '$', '$', '$', '$']

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值