认识JavaScript(3)JavaScript 的数组方法大全

数组方法大全

序 看图理解

在这里插入图片描述

1、添加元素

1.1 .push() -- 尾部添加

使用场景: 数组尾部添加元素。
返回值: 添加完后的数组的长度。
是否改变原数组:
参数: 添加元素
案例:

let arr = [1,2,3,4,5]
console.log(arr.push(5))      // 6
console.log(arr)              // [1,2,3,4,5,5]

1.2 .unshift() -- 头部添加

使用场景: 数组头部添加元素。
返回值: 添加完后的数组的长度。
是否改变原数组:
参数: 添加元素
案例:

let arr = [1,2,3,4,5]
console.log(arr.unshift(2))      // 6
console.log(arr)                 //[2,1,2,3,4,5]

2、删除元素

2.1 .pop() -- 尾部删除

使用场景: 数组尾部删除元素。
返回值: 删除的元素。
是否改变原数组:
案例:

let arr = [1,2,3,4,5]
console.log(arr.pop())     // 5
console.log(arr)           //[1,2,3,4]

2.2 .shift() -- 头部删除

使用场景: 数组头部删除元素。
返回值: 删除的元素。
是否改变原数组:
案例:

let arr = [1,2,3,4,5]
console.log(arr.shift())    // 1
console.log(arr)            // [2,3,4,5]

2.3 .splice(i,n)

功能: 删除从i(索引值)开始之后的那个元素。
使用场景: 从任意位置开始删除任意元素。
返回值: 删除的元素。
是否改变原数组:
参数: i ⇒ 索引值 、 n ⇒ 个数
案例:

let arr = [1,2,3,4,5]
console.log(arr.splice(2,2))     //[3,4]
console.log(arr)                 // [1,2,5]

3、查找元素

3.1 .indexOf(item,start)

功能: 查找某个元素在数组中的位置
相似方法: lastIndexOf() – 查找字符串最后出现的位置
参数:

  • item 必填 ⇒ 查找的元素
  • start 可选 ⇒ 规定在数组中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。

返回值: 指定的字符串值在字符串中首次出现的位置,-1代表没有找到该元素。也就说明该数组不包含此元素。
案例:

var arr = ['a','b',4,7,2,'k'];

var index = arr.indexOf('b')
var index1 = arr.indexOf(9)
var index2 = arr.indexOf('b',4)

console.log(index)      // 1  
console.log(index1)     //  -1
console.log(index2)     //  -1

上面的 index2 表示,从数组arr的第四个位置起查找b,虽然arr数组包含b元素,但是它的位置是在1,如果从第四个位置开始查找时就不可能存在了。

3.2 .find(callback)

功能: 用于找出第一个符合条件的数组元素。
返回值: 循该方法环遍历数组,直到找出第一个返回值为 true 的元素,然后返回该元素,否则返回 undefined
是否改变原数组:
案例:

var arr = [1, 5, 10, 15];

var arr2 = arr.find(function(value, index, arr) {
	return value > 9;
}) 

console.log(arr2)   // 10

find() 方法为数组中的每个元素都调用一次函数执行:

  • 当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数。
  • 如果没有符合条件的元素返回 undefined
  • find() 对于空数组,函数是不会执行的。

3.3 .findIndex(callback)

功能: array.findIndex()array.find()十分类似,返回第一个符合条件的数组元素的位置,如果所有元素都不符合条件,则返回-1
返回值: 返回第一个符合条件的数组元素的位置,如果所有元素都不符合条件,则返回-1
是否改变原数组:
案例:

var arr = [1, 5, 10, 15];

var arr2 = arr.findIndex(function(value, index, arr) {
	return value > 9;
}) 

console.log(arr2)    // 2

3.4 for()循环

语法: 遍历数组,然后 if 判断

var arr = [1, 5, 10, 15];
for(let i=0; i<arr.length; i++) {
	if(arr[i] === 查找值) {
		//则包含该元素
	}else{
		//不包含该元素
	}
}

3.5 .include(searchElement,fromIndex)

功能: 该方法用来判断一个数组是否包含一个指定的值,如果包含返回 true,否则返回false
是否改变原数组:
参数:

  • searchElement (必填) ⇒ 需要查找的元素值。
  • fromIndex(可选) ⇒ 开始查找的位置。

案例:

案例1:

let site = ['runoob', 'google', 'taobao'];
 
site.includes('runoob');     // true 
site.includes('baidu');      // false

案例2:

var arr = ['a', 'b', 'c'];

arr.includes('c', 3);   //false
arr.includes('c', 100); // false

上面代码表示,如果fromIndex 大于等于数组长度 ,则返回 false 。该数组不会被搜索 。

案例2:

var arr = ['a', 'b', 'c'];

arr.includes('a', -100);    // true
arr.includes('b', -100);    // true
arr.includes('c', -100);    // true

// 数组长度是3
// fromIndex 是 -100
// computed index 是 3 + (-100) = -97

上面代码表示,如果 fromIndex 为负值,计算出的索引将作为开始搜索searchElement的位置。如果计算出的索引小于 0,则整个数组都会被搜索。

3.6 .some(callback)

功能: 用于检测数组中的元素是否满足指定条件。
返回值: 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。如果没有满足条件的元素,则返回false
是否改变原数组:
案例:

var ages = [3, 10, 18, 20];

var age = ages.some((v,i)=>{
	return v == 18
})

console.log(age)    // true
console.log(ages)   //[3, 10, 18, 20]

3.7 .every(callback)

功能: 用于检测数组中的元素是否全部满足指定条件。
返回值: 如果有所有元素都满足条件,则表达式返回true ,只要有一个没有满足条件的元素,则返回false。
是否改变原数组:
案例:

let arr = [1,2,3,4,5]

let arr1 = arr.every( (i, v) => i < 3)
console.log(arr1)      // false

let arr2 = arr.every( (i, v) => i < 10)
console.log(arr2)      // true

4、.join() -- 转字符串

功能: 将数组中所有元素都转化为字符串并连接在一起。
使用场景: 数组转字符串。
返回值: 字符串
是否改变原数组:
案例:

var arr1 = [1,2,3,4,5,6];

var arr2 = arr1.join();

console.log(arr2)      // 1,2,3,4,5,6
console.log(arr1)      //  [1, 2, 3, 4, 5, 6]

5、.reverse() -- 倒序

功能: 将数组反转。
使用场景: 数组倒序。
是否改变原数组:
返回值: 反转后的数组
案例:

let arr = [1,2,3,4,5]
console.log(arr.reverse())    // [5,4,3,2,1]
console.log(arr)    		  // [5,4,3,2,1]

6、.concat() -- 拼接

功能: 用于连接两个或多个数组。
使用场景: 数组拼接。
是否改变原数组:
参数:

  • 字符串
  • 数组

案例:

var arr1 = [1,2,3,4,5,6];
var arr2 = [11,12,13,14,15];
var arr3 = ['a','b','c','d','e','f'];

// 把 concat() 中的参数连接到数组
arr1.concat(7,8,9)     // [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(arr1)       // [1, 2, 3, 4, 5, 6]

// 连接两个数组
arr1.concat(arr2)      // [1, 2, 3, 4, 5, 6, 11, 12, 13, 14, 15]
console.log(arr1)      // [1, 2, 3, 4, 5, 6]

// 连接三个数组
arr1.concat(arr2,arr3)    //  [1, 2, 3, 4, 5, 6, 11, 12, 13, 14, 15, "a", "b", "c", "d", "e", "f"]
console.log(arr1)         // [1, 2, 3, 4, 5, 6]

7、.sort() -- 排序

功能: 排序
使用场景: 数组排序
是否改变原数组:
参数:

  • 无参数 ⇒ 按照字符编码的顺序进行排序。
  • 有参数 ⇒ 必须是函数。

案例:

// 按照字符编码的顺序进行排序
let arr = [2,10,6,1,4,22,3]
console.log(arr.sort())       // [1, 10, 2, 22, 3, 4, 6]

// 升序排序
let arr1 = arr.sort((a, b) => a - b)  
console.log(arr1)             // [1, 2, 3, 4, 6, 10, 22]

// 降序排序
let arr2 = arr.sort((a, b) =>b-a)  
console.log(arr2)    		  // [22, 10, 6, 4, 3, 2, 1]

console.log(arr)  			  // [22, 10, 6, 4, 3, 2, 1]

8、.slice(start,end) -- 截取

使用场景: 切去索引值start到索引值end的数组,不包含end索引的值。
是否改变原数组:
返回值: 切出来的数组
参数: start ⇒ 起始下标、end ⇒ 终止下标
案例:

let arr = [1,2,3,4,5]
console.log(arr.slice(1,3))    // [2,3]
console.log(arr)    		   //  [1,2,3,4,5]

9、 遍历数组方法

9.1 普通for循环

语法:

for (语句 1; 语句 2; 语句 3) {
     // 要执行的代码块
}

语句 1 在循环(代码块)开始之前执行。
语句 2 定义运行循环(代码块)的条件。
语句 3 会在循环(代码块)每次被执行后执行。

返回值: 没有return
案例:

var arr = [1,2,3,4,5,6];
for(j = 0; j < arr.length; j++) {
   console.log(j)
} 
console.log(j)     
// 0
// 1
// 2
// 3
// 4
// 5

// 6

9.2 优化版for循环

说明: 使用临时变量,将长度缓存起来,避免重复获取数组长度。
使用场景: 较大数组
案例:

var arr = [1,2,3,4,5,6];
for(j = 0,len=arr.length; j < len; j++) {
   console.log(j)
} 

9.3 .forEach(callback)循环

语法:

arr.forEach(function(value,index,array){
    // 要执行的代码块
}); 

参数:
callback的参数: value ⇒ 当前索引的值
        index ⇒ 索引
        array ⇒ 原数组

案例:

let arr = [1,2,3,4,5]
arr.forEach( (value,index,array)=>{
    console.log(`value:${value}    index:${index}     array:${array}`)
})   
console.log(arr)
//  value:1    index:0     array:1,2,3,4,5
//  value:2    index:1     array:1,2,3,4,5
//  value:3    index:2     array:1,2,3,4,5
//  value:4    index:3     array:1,2,3,4,5
//  value:5    index:4     array:1,2,3,4,5
// [1, 2, 3, 4, 5]

9.4 for..in循环

语法:

for(j in arr) {}

案例:

var arr = [1,4,2,5,3,6,8];
for(j in arr) {
    console.log(arr[j])
}
// 1
// 4
// 2
// 5
// 3
// 6
// 8

9.5 .map(callback)循环

功能: 映射数组(遍历数组)
使用场景: 对数组的每项元素进行加工
是否改变原数组:
返回值:return
参数:
 callback的参数: value ⇒ 当前索引的值
         index ⇒ 索引
         array ⇒ 原数组
案例:

var arr = [1,4,2,5,3,6,8];
var arr2 = arr.map((v,i)=>{
    return v*3
})
console.log(arr2)
//  [3, 12, 6, 15, 9, 18, 24]

9.6 各种遍历方式的性能对比

分析结果转载于【南北12345678】

分析结果1

以下截图中的数据是,在chrome (支持es6)中运行了100次后得出的结论(每次运行10次,一共10个循环,得到的分析结果)
在这里插入图片描述分析结果2

以下截图数据是,在chrome (支持es6)中运行了1000次后得出的结论(每次运行100次,一共10个循环,得到的分析结果)

在这里插入图片描述

10、.filter(callback) -- 过滤器

功能: 过滤数组
使用场景: 过滤数组
是否改变原数组:
返回值: 返回一个满足要求的数组。
参数:
callback的参数: value ⇒ 当前索引的值
        index ⇒ 索引
        array ⇒ 原数组
案例:

let arr = [1,2,3,4,5]
let arr1 = arr.filter( (i, v) => i < 3)
console.log(arr1)    // [1, 2]
console.log(arr)     // [1,2,3,4,5]

11、.reduce(callback, initialValue) -- 累加器

功能: 迭代数组的所有项,将数组中的每个值(从左到右)合并,最终计算为一个值。
使用场景: 总价、百分占比
是否改变原数组:
案例:

let arr = [0,1,2,3,4]
let arr1 = arr.reduce((preValue, curValue) => 
    preValue + curValue
)
console.log(arr1)     // 10

callback 的参数:

  • preValue ⇒(必填) 上一次调用回调返回的值,或者是提供的初始值
  • curValue ⇒(必填) 数组中当前被处理的数组项
  • index ⇒(可选)当前数组项在数组中的索引值
  • array ⇒(可选)原数组

12、.from() -- 伪数组转数组

功能: 将伪数组变成数组,就是只要有length的就可以转成数组。
使用场景: 将伪数组变成数组
案例:

let str = '12345'
console.log(Array.from(str))    // ["1", "2", "3", "4", "5"]

let obj = {0:'a',1:'b',length:2}
console.log(Array.from(obj))    // ["a", "b"]

13、.of() -- 一组值转数组

功能: 将一组值转换成数组。
案例:

let str = '11'
console.log(Array.of(str))    // ['11']

等价于

console.log(new Array('11'))  // ['11]

14、.fill(target, start, end) -- 填充数组

功能: 使用给定的值,填充一个数组。
使用场景: 填充数组
是否改变原数组:
参数:

  • target ⇒ 待填充的元素
  • start ⇒ 开始填充的位置-索引
  • end ⇒ 终止填充的位置-索引(不包括该位置)
    案例:
let arr = [1,2,3,4,5]let arr1 = arr.fill(5)
console.log(arr1)  // [5, 5, 5, 5, 5]
console.log(arr)   // [5, 5, 5, 5, 5]
let arr = [1,2,3,4,5]let arr2 = arr.fill(5,2)
console.log(arr2)   // [ 1,2,5,5,5 ]
let arr = [1,2,3,4,5]let arr3 = arr.fill(5,1,3)
console.log(arr3)   // [ 1,5,5,4,5 ]

15、.keys() -- 遍历数组的键名

let arr = [1,2,3,4]
let arr2 = arr.keys()
for (let key of arr2) {
    console.log(key);   // 0,1,2,3
}

16、.values() -- 遍历数组键值

let arr = [1,2,3,4]
let arr1 = arr.values()
for (let val of arr1) {
     console.log(val);   // 1,2,3,4
}

17、.entries() -- 遍历数组的键名和键值

返回值: 返回迭代数组,迭代数组中每个值 前一个是索引值作为 key, 数组后一个值作为 value
案例:

let arr = [1,2,3,4]
let arr1 = arr.entries()
for (let e of arr1) {
    console.log(e);    // [0,1] [1,2] [2,3] [3,4]
}

上一节:JavaScript 的数据类型
下一节:JavaScript 的运算符

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值