不改变原数组的方法有11种,它们分别是(concat, map, filter, join, every, some, indexOf, slice, forEach, reduce, reduceRight),本文将介绍后面5个。
indexOf:数组索引
检测指定元素在数组中第一次出现的位置索引。
arr = [1, 2, 3, 4, 5]
console.log('元素2所在的位置',arr.indexOf(2))
//打印结果:"元素2所在的位置,1"
slice:数组切片
返回原数组中指定的数组切片。slice接收两个参数:start(开始的遍历索引),end(结束的遍历索引,实际结果是该索引的前一位)。
let arr = [1, 2, 3, 4, 5]
let arr1 = arr.slice(1, 3)
console.log(arr1) //打印结果:[2, 3]
- array.slice(n, m),从索引n开始查找到m处(不包含m)
- array.slice(n) 第二个参数省略,则一直查找到末尾
- array.slice(0) 原样输出内容,可以实现数组克隆
- array.slice(-n,-m) slice支持负参数,从最后一项开始算起,-1为最后一项,-2为倒数第二项
forEach:数组遍历
forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。回调函数接收3个值:
- item:遍历项
- index:遍历项的索引
- list:数组自身
let arr = ['A', 'B', 'C']
arr.forEach((item, index, list)=>{
console.log(item, index, list)
})
//'A',0,['A', 'B', 'C']
//'B',1,['A', 'B', 'C']
//'C',2,['A', 'B', 'C']
reduce:数组累计(左)
接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
- prev: 必需(初始值或者是计算结束后返回的值)
- cur: 必需(当前元素)
- index: 可选(当前元素的索引)
- arr: 可选(当前元素所属的数组对象)
- init: 可选(传递给函数的初始值)
// 数组各项元素累加,累乘
let arr = [1, 2, 3, 4, 5];
arr.reduce((x, y) => x+y); // 结果15
arr.reduce((x, y) => x*y); // 结果120
reduceRight:数组累计(右)
和上面同理,只是方向变了。