本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
大家好,我是小麦,数组在我们开发项目的时候肯定会遇到,并且我们会对这个数组数据进行一系列操作,获得我们所需要的数据,今天我们就聊聊JS数组的常用方法,我将会以(不改变原数组)与(改变原数组)两种不同类型的方法进行介绍。
不改变原数组的方法
不改变原数组的方法有11种,它们分别是(concat, map, filter, join, every, some, indexOf, slice, forEach, reduce, reduceRight)
一、concat()
定义: 该方法可以连接两个或多个数组,并将新的数组返回,该方法不会对原数组产生影响。
示例:
// Array.concat(arr1, arr2, ...);
let arr = [a, b, c];
let arr1 = [d, e, f];
let arr2 = [1, 2, 3];
let result = arr.concat(arr1, arr2);
// 得到 result = [a, b, c, d, e, f, 1, 2, 3];
二、map()
定义: 用于遍历原数组的每一项,返回一个新的数组,原数组不改变(注意该方法此处和forEach的区别)。
示例:
// map((value, index, self) => {})
// value(遍历数组的数据),index(对应的索引),self(数组自身)
let arr = [a, b, c, d, e, f];
let result = arr.map((value, index, self) => {
console.log(value + "--" + index + "--" + (arr === self)); // 打印1
return `元素${index + 1}:${value}`
})
console.log("原数组:", arr); // 打印2
console.log("新数组:", result); // 打印3
// 打印1的结果为:
// a--0--true
// b--1--true
// c--2--true
// d--3--true
// e--4--true
// f--5--true
/* --------- */
// 打印2,打印3的结果分别为:
// 原数组:[a, b, c, d, e, f]
// 新数组:[元素1:a, 元素2:b, 元素3:c, 元素4:d, 元素5:e, 元素6:f]
三、filter()
定义: 过滤数组中符合条件的元素并返回一个新的数组。
示例:
let arr = [1, 2, 3, 4, 5];
let newArr = arr.filter(item => item>2)
// 得到 newArr = [3, 4, 5];
四、join()
定义: 将数组的每一项用指定字符连接形成一个字符串。默认连接字符为 "," 逗号。
示例:
let arr = [a, b, c, d, e, f];
let str = arr.join("-");
// 得到 str = "a-b-c-d-e-f"
五、every()
定义: 检测数组所有元素是否都符合指定条件(通过函数提供),它不会对空数组进行检测,并且不会改变原数组。
- 如果数组中检测到有一个元素不满足,则整个表达式返回false,且剩余的元素不会再进行检测。
- 如果所有元素都满足条件,则返回 true。
示例:
let arr = [5, 6, 7, 8];
let result = arr.every(x => x>4);
// 得到 result = true;
六、some()
定义: 用于检测数组中的元素是否有满足指定条件的,若满足返回true,否则返回false(注意与every()的区别)。
示例:
let arr = [5, 6, 7, 8];
let result = arr.some(x => x>7);
// 得到 result = true;
七、indexOf()
定义: 检测当前值在数组中第一次出现的位置索引。
示例:
// array.indexOf(item, start) item: 查找的元素 start:字符串中开始检索的位置,默认为0。
let arr = [1, 2, 3, 4, 5];
let result = arr.indexOf(2);
// 得到 result = 1;
八、slice()
定义: 按照条件查找出其中的部分内容。
参数:
- array.slice(n, m),从索引n开始查找到m处(不包含m)
- array.slice(n) 第二个参数省略,则一直查找到末尾
- array.slice(0) 原样输出内容,可以实现数组克隆
- array.slice(-n,-m) slice支持负参数,从最后一项开始算起,-1为最后一项,-2为倒数第二项
示例:
let arr = [1, 2, 3, 4];
let result = arr.slice(-1, -2);
// 得到 result = [4, 3];
九、forEach()
定义: 用于遍历原数组的每一项,并将每项元素传递给回调函数(注意该方法和map的区别,若直接打印Array.forEach(xxx),结果为undefined)。
十、reduce()
定义: 接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
参数:
-
prev: 必需(初始值或者是计算结束后返回的值)
-
cur: 必需(当前元素)
-
index: 可选(当前元素的索引)
-
arr: 可选(当前元素所属的数组对象)
-
init: 可选(传递给函数的初始值)
arr.reduce((prev, cur, index, arr) => { xxxxxx }, init);
示例:
// 数组各项元素累加,累乘
let arr = [1, 2, 3, 4, 5];
arr.reduce((x, y) => x+y); // 结果15
arr.reduce((x, y) => x*y); // 结果120
十一、reduceRight()
定义: 与reduce方法类似,它是(从右到左)从数组的最后一项开始,向前逐个遍历到第一位,迭代数组的所有项,然后构建一个最终返回的值。
示例:
略。