(day 12)JavaScript学习笔记(数组3)
概述
这是我的学习笔记,记录了JavaScript的学习过程。在写博客的时候我会尽量详尽的记录每个知识点。如果你完全没接触过JavaScript,那么这一系列的学习笔记可能会对你有所帮助。
今天继续学习数组,主要是map、reduce、数组过滤、数组测试、desturcturing解构操作符、rest操作符、多维数组。
1.map
数组的map与forEach类似,只是map会把数组中每个元素进行一定的操作,然后再返回一个新的数组,它也是接收三个参数,分别是元素、元素的索引值、数组本身。如下代码示例是将列表中每个元素都乘以2再返回到一个新的数组里。
var arr = [1, 2, 3, 4];
var newArr = arr.map((ele) => ele * 2); //接收第一个参数,对每个元素乘以2
console.log(newArr); //输出:(4) [2, 4, 6, 8]
console.log(arr); //原来的数组没有变化,输出:(4) [1, 2, 3, 4]
2.reduce
数组的reduce方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值。 基本语法结构如下:
数组.reduce(回调函数(参数1,参数2,参数3,参数4) {
具体代码
}, 参数5);
arr.reduce(function(accumulator, currentValue, currentIndex, array) {
// 具体的代码
}, initialValue);
上述的参数具体说明如下:
参数1(accumulator): 累积器回调返回的累积值;它是上一次调用回调时返回的累积值,或者是初始值(即参数5,如果给了的话)。
参数2( currentValue):当前值,数组中正在处理的元素。
参数3:索引值,数组中正在处理的元素的索引,如果提供了初始值(参数5),则索引为 0,否则为 1。一般不用这个参数。
参数4(currentIndex):调用reduce方法的数组本身。一般不用这个参数。
参数5(initialValue):作为第一次调用回调函数时的第一个参数的值。如果没有提供初始值,则将使用数组中的第一个元素。如果一个空数组上调用reduce 时候未设置初始值,那么程序将会报错。
下面是代码是计算数组中的元素累加和:
var arr = [1, 2, 3, 4];
var sum = arr.reduce((a, b) => a + b);//a和b是形参,写什么都可以
console.log(sum); //输出:10var arr = [1, 2, 3, 4];
var sum = arr.reduce((previous, current) => previous + current);//previous和current是形参,写什么都可以
console.log(sum);//输出:10
上面代码中的箭头函数改成普通函数,如下:
var arr = [1, 2, 3, 4];
var sum = arr.reduce(fun);
function fun(a, b) {return a + b;
}
console.log(sum);var arr = [1, 2, 3, 4];
var sum = arr.reduce(function (a, b) {return a + b;
});
console.log(sum);
3.数组过滤
数组过滤是用来筛选满足条件的元素,比如筛选全班学生成绩中大于80分的列表,它是从原始数组中筛选出满足条件的元素,并返回一个新的数组。
数组过滤一般使用filter方法。filter方法接收一个回调函数作为参数,该回调函数定义了过滤条件。对于数组中的每个元素,如果回调函数返回true,则该元素会被包含在新数组中;如果返回false ,则不会包含。它的基本语法如下:
数组名.filter(function(参数){
过滤条件;
})
如下代码演示:
var arr = [1, 2, 3, 4, 5, 6];
var newArr = arr.filter((item) => item > 4); //筛查大于4的元素
console.log(newArr);//输出:(2) [5, 6]
同样也可以将上面的函数写成普通函数:
var arr = [1, 2, 3, 4, 5, 6];
var newArr = arr.filter(function (item) {return item > 4;
});
console.log(newArr); //输出:(2) [5, 6]var arr = [1, 2, 3, 4, 5, 6];
var newArr = arr.filter(fun2);
function fun2(item) {return item > 4;
}
console.log(newArr); //输出:(2) [5, 6]
4.数组测试
数组测试有两种,第一种是检测所有的元素是不是满足一定的条件,满足的话返回true,不满足返回false。第二种是如果有一个元素满足条件就返回true,全都不满足就返回false。
第一种是用every方法,第二种是用some方法。这两种方法的参数与forEach和map一样,接收三个参数,一个是元素,一个元素的索引值,一个是数组本身,不过一般只用第一个参数,如下代码:
var arr = [1, 2, 3, 4, 5, 6];
var result = arr.every((item) => item > 0); //判断是不是所用的元素都大于0
console.log(result); //输出:truevar result2 = arr.every((item) => item > 2); //判断是不是所用的元素都大于0
console.log(result2); //输出:falsevar result3 = arr.some((item) => item > 5); //判断是不是有一个元素大于5
console.log(result3); //只要有一个满足就输出:truevar result4 = arr.some((item) => item > 10); //判断是不是有一个元素大于10
console.log(result4); //全都不满足输出:false
5.desturcturing解构操作符
desturcturing解构操作符是把数组的元素赋值给变量,数组解构使用方括号[]
来进行解构。解构的目标如果是可遍历对象,那么都可以进行解构赋值。
如下代码演示
var arr = [1, 2, 3];
var [a, b, c] = arr; //将数组中的元素分别赋值的变量
console.log(a, b, c); //输出:1 2 3
如果只取前两个元素,后面的变量可以省略,代码如下所示:
var arr = [1, 2, 3];
var [d, e] = arr; //只取前两个元素赋值给变量
console.log(d, e); //输出:1 2
如果取中间的元素,前面变量可以省略,但是逗号要保留,如下代码所示:
var arr = [1, 2, 3];
var [, f] = arr; //只取第二个元素赋值给变量
console.log(f);//输出:2
6.rest操作符
在解构时也可以使用剩余运算符...用于收集剩余的元素,如下代码所示:
var arr = [1, 2, 3, 4, 5, 6];
var [g, ...h] = arr; //使用剩余运算符...用于收集剩余的元素
console.log(g); //输出:1
console.log(h); //输出:(5) [2, 3, 4, 5, 6]
如果我们前面空一个元素,取第1个和第3个元素,然后再收集剩余的元素,也不会收集到跳过去的第二个元素,因为第二个元素我们只是没有赋值,但是实际已经取出来了,如下代码演示:
var arr = [1, 2, 3, 4, 5, 6];
var [x, , y, ...z] = arr; //取第一个和第三个,跳过第二个,使用剩余运算符...用于收集剩余的元素
console.log(x); //输出:1
console.log(y); //输出:3
console.log(z); //输出:(3) [4, 5, 6]
rest操作符还可以作为函数的参数,用来接收不固定个数的参数,如下代码示例:
function fun3(...args) {//args可以是任意符合变量要求的字符console.log(args);
}
fun3("小明", "小红"); //输出:(2) ['小明', '小红']
7.多维数组
多维数组是数组的数组,即数组的元素仍然是数组。它可以用来表示更复杂的数据结构,如矩阵、表格或列表的列表等。
如下代码示例创建一个二维数组:
var arr = [];
for (let i = 0; i < 5; i++) {arr[i] = [];for (let j = 0; j < 4; j++) {arr[i][j] = i + j;}
}console.log(arr);//输出:(5) [Array(4), Array(4), Array(4), Array(4), Array(4)]
上面代码运行后结果如下:
以上便是今天的学习内容,如果对你有所帮助,请点个赞再走吧。