当前位置: 首页 > news >正文

(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)]

        上面代码运行后结果如下:

        以上便是今天的学习内容,如果对你有所帮助,请点个赞再走吧。 

相关文章:

  • 没有在中国境内注册,但是在境内开展业务,或向境内提供产品或服务的,是否属于境内运营?
  • Wifi环境下Unity开发iOS应用启动后HTTPS请求未弹出是否允许无线数据使用数据的弹窗
  • (一)Neo4j下载安装以及初次使用
  • 深入理解并优化Android中的文件描述符(FD)
  • C++进阶之路---手撕“红黑树”
  • docker init 生成Dockerfile和docker-compose.yml —— 筑梦之路
  • 27-4 文件上传漏洞 - 黑名单绕过
  • 确保云原生部署中的网络安全
  • 第二十二章 构建和配置 Nginx (UNIX® Linux macOS) - 示例:为特定路径上的所有流量启用 CSP 路由
  • JavaScript 变量的隐藏规则
  • 【algorithm】算法基础课---排序算法(附笔记 | 建议收藏)
  • Odoo17免费开源ERP开发技巧:如何在表单视图中调用JS类
  • 基于深度学习YOLOv8+Pyqt5的工地安全帽头盔佩戴检测识别系统(源码+跑通说明文件)
  • 开源堡垒机Jumpserver安装教程
  • 阿里云-云服务器ECS新手如何建网站?
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 《Java编程思想》读书笔记-对象导论
  • ESLint简单操作
  • Flex布局到底解决了什么问题
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • js中的正则表达式入门
  • learning koa2.x
  • PaddlePaddle-GitHub的正确打开姿势
  • vue2.0项目引入element-ui
  • - 概述 - 《设计模式(极简c++版)》
  • 欢迎参加第二届中国游戏开发者大会
  • 来,膜拜下android roadmap,强大的执行力
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 每天10道Java面试题,跟我走,offer有!
  • 移动端唤起键盘时取消position:fixed定位
  • 智能合约开发环境搭建及Hello World合约
  • puppet连载22:define用法
  • 组复制官方翻译九、Group Replication Technical Details
  • (2)STL算法之元素计数
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (论文阅读30/100)Convolutional Pose Machines
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十三)Maven插件解析运行机制
  • (转) Android中ViewStub组件使用
  • (转)EOS中账户、钱包和密钥的关系
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)平衡树
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Micro Framework初体验(二)
  • .net 生成二级域名