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

JavaScript中数组的方法和函数作用域问题

1 -函数作用域问题-:

函数的外层作用域,在函数创建时就已确定,和函数的调用位置无关

var name = '嘿嘿';// 函数的外层作用域,在函数创建时就已确定,和函数的调用位置无关// JS中的作用域被称为 词法作用域function fn() {console.log(name);}function fn2() {var name = '哈哈';fn();}fn2();//调用后-输出-嘿嘿

2 数组的其中几种方法1:

var arr = ['孙悟空', '猪八戒', '沙和尚', '唐僧'];// console.log(arr[arr.length - 1]);// Array.isArray() 用来检查一个对象是否是一个数组// console.log(Array.isArray(arr));// console.log(Array.isArray(1));/*//---会影响到原数组的方法:pop()删除并返回数组的最后一个元素。push()在数组的末尾增加一个或多个元素,并返回数组的新长度。arr[arr.length] = xxx;shift()删除并返回数组的第一个元素。unshift()在数组的开头增加一个或多个元素,并返回数组的新长度。*/arr = ['孙悟空', '猪八戒', '沙和尚', '唐僧'];var result = arr.pop();//删除数组中的最后一个元素result = arr.push('白骨精','玉兔精');result = arr.shift();result = arr.shift();result = arr.unshift('铁扇公主','女儿国王');// result = arr.unshift('女儿国王');console.log('result =', result);console.log(arr+'');

3:数组的方法2:

//---不会影响原数组的方法:var arr = ['孙悟空', '猪八戒', '沙和尚', '唐僧'];var arr2 = ['牛魔王','红孩儿','铁扇'];var arr3 = ['二郎神', '白龙马'];/*concat()- 用来将多个数组连接为一个数组- 该方法不会影响到原数组,而是将结果存储到一个新数组中返回join()- 将数组中的所有元素连接为一个字符串- 需要一个字符串作为参数,这个字符串会作为元素的连接符- 如果不知道参数,默认使用,作为连接符indexOf()lastIndexOf()- 查询元素在数组中第一次出现的位置- 参数:第一个,要查询的元素第二个,查询的起始位置- 返回值:如果找到了元素,则返回元素第一次出现的索引如果没有找到元素,则返回-1- lastIndexOf()它会从最后一个元素向前找*/var result = arr.concat(arr2, arr3, '哈哈');arr = ['a','b','c','d'];result = arr.join('');//'a,b,c,d'arr = ['a','c','b','d','e','f','a','a'];result = arr.indexOf('g', 1);result = arr.lastIndexOf('a');console.log(result);

4 :数组的方法3:

/*slice(起始位置, 结束位置)- 抽取当前数组中的一段元素组合成一个新数组。- 该方法不会影响到原来的数组,而是返回一个新数组- 参数:第一个参数,截取的开始位置(包括开始位置)第二个参数,截取的结束位置(不包括结束位置)- 如果省略第二个参数,则会一直截取最后- 如果索引是负数,则表示倒数第几个*/var arr = ['孙悟空', '猪八戒', '沙和尚', '唐僧'];var result = arr.splice(1,3);result = arr.slice(-4,-1);// console.log(result+'');/*splice()在任意的位置给数组添加或删除任意个元素。- 该方法是一个破坏性的方法,调用会会影响到原来的数组- 参数:第一个参数,表示删除的起始位置第二个参数,表示删除元素的个数第三个参数,表示要添加的新元素- 返回值:被删除的元素- 功能:- 删除并返回指定元素arr.splice(开始索引, 删除数量);- 替换元素arr.splice(开始索引, 删除数量, 新元素, 新元素);- 在指定位置插入新元素arr.splice(插入位置, 0, 新元素, 新元素)*/arr = ['孙悟空', '猪八戒', '沙和尚', '唐僧'];result = arr.splice(1,0,'牛魔王', '红孩儿');console.log(result+'')console.log(arr+'');

5 数组遍历方法4:

forEach() 也是用来遍历数组的一个方法(只适用于数组)

- 需要一个回到函数作为参数

- 回调函数会执行多次,数组里有几个元素就会执行几次

每次调用时,都会将一个元素的信息已参数的形式传递进函数

可以通过定义参数,来获取信息

- 回调函数中,一共会接收到三个参数:

第一个参数,当前元素的值

第二个参数,当前元素的索引

第三个参数,被遍历的数组

var arr = ['孙悟空', '猪八戒', '沙和尚', '唐僧'];// arr.forEach(function (value, index, arr) {// console.log(value, index, arr);// });arr.forEach(((value, index, array) => console.log(value)));

6:数组去重的2种方法:

多种方式-》

1.遍历删除重复元素

2.遍历添加不重复的元素生成新数组

3.用 ES6的set 方法去重

var nums = [1,2,2,3,4,5,5,5,4,5,6];//获取到数组中的每一个数for(var i=0; i<nums.length; i++){//nums[i] 表示当前取出的数字//要将该数字和其他数字进行比较//获取到当前数字后的所有数字for(var j=i+1; j<nums.length; j++){//nums[i] nums[j]// 比较两个数是否相等if(nums[i] === nums[j]){//两个数字相等,说明有重复的情况出现,删除重复数字nums.splice(j, 1); // j去除新数组中的重复内容,从一开始往后的所有.//删除元素后,其后的元素会自动向前补位,这样将会导致少比较一个元素//需要将当前的位置在比较一遍j--;}}}console.log(nums+'');nums = [1,2,2,3,4,5,5,5,4,5,6];//先创建一个新数组var newNums = [];//遍历老数组for(var i=0; i<nums.length; i++){//判断新数组中是否存在该元素if(newNums.indexOf(nums[i]) === -1){// 如果新数组中没有该值,则将其添加到新数组中newNums.push(nums[i]);}}console.log(newNums+'');

7引用函数和接收函数返回值的区别:

function fn(callback) {//调用函数callback();// console.log(callback);}function test() {console.log('test执行了~~~');}// test 表示函数对象,以test作为参数时,是将函数对象作为参数传递fn(test);test() // 表示调用函数,函数执行后会有返回值,test()相当于将函数的返回值作为参数传递fn(test());

8 数组方法5:

/* every()- 用来检查数组中的每个元素是否符合某个条件如果所有的元素都符合条件,它会返回true,否则返回false- 它需要一个回调函数作为参数,回调函数需要返回一个布尔值如果返回true,则表示元素满足条件如果返回false,则表示元素不满足条件some()- 用来检查数组中是否有元素符合某个条件*/var arr = [3,4,5,6,7,8];var result = arr.every(function (ele) {return ele > 6;})result = arr.every(ele => ele>6);result = arr.some(ele => ele>6);// console.log(result);/*filter()- 用来获取数组中所有的符合条件的元素*/result = arr.filter(a => a != null && a%2===0);/*map()- 用来对数组中的每一个元素做一个操作,返回一个新数组*/arr = [3,4,5,6,7,8];var result = arr.map(function (a) {if(a % 2===0){return a ** 2;}else{return a;}});/*reduce()- 将数组中的所有元素汇总为一个值- 需要回调函数作为参数,参数有两个:第一个参数,表示累加器第二个参数,表示当前元素*/arr = [3,4,5,6,7,8];result = arr.reduce(function (a, b) {return a + b;});console.log(result);//----------// find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。//在数组每一项上执行的函数,接收 3 个参数://element当前遍历到的元素。//index可选当前遍历到的索引。//array可选数组本身。// findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。// const array1 = [5, 12, 8, 130, 44];const isLargeNumber = (element) => element > 13;console.log(array1.findIndex(isLargeNumber));

针对数组中的每个元素, 都会执行该回调函数, 执行时会自动传入下面三个参数:element当前元素。index当前元素的索引。array调用findIndex的数组。

9数组方法6:

/*reverse()用来对数组进行反转操作- 该方法会影响到原来数组*/var arr = [1,2,3,4,5,6,7];arr.reverse();/*sort() 用来对数组进行排序- sort()在排序时默认是安装Unicode编码进行排序的即使你数组中的元素是数字,它也是这么做的- 如果希望在按照数字的大小进行排序,则可以自己通过回调函数来指定排序规则*/arr = [3,1,2,4,5,6,8,9,7,10];// arr = ['c','d','a','e','f','g'];arr = [3, 4];/*sort()中的回调函数,用来指定元素的排列规则它会被多次调用,每次调用时会传递数组两个元素作为参数可以定义两个参数来接收元素两个元素具体是谁不确定,但能确定的是a在数组中位于b的后边(只适用于新版的Chrome)sort会根据回调函数的返回值,来决定两个元素是否交换位置如果返回的是负值,则两个元素会交换位置如果返回的是正值,则两个元素的位置不变如果返回0,表示两个元素的值的相等,位置不变在其他的浏览器中,规则和新版的Chrome完全相反,但是使用时没有任何区别*/arr = [3,1,2,4,5,6,8,9,7,10];// arr.sort(function (a, b) {// //b,a// // // 希望小的数字在前// // if(a > b){// // // 后边的数字大于前边的数字// // return 1;// // }else if(a === b){// // //两个数字相等// // return 0;// // }else{// // // 后边的数字小// // return -1;// // }////// // 希望大的数字在前// if(a > b){// // 后边的数字大于前边的数字// return -1;// }else if(a === b){// //两个数字相等// return 0;// }else{// // 后边的数字小// return 1;// }//// });arr.sort(function (a, b) {// 如果返回a-b,则表示数字升序排列// return a - b;// 如果返回b-a,则表示数字降序排列return b - a;});console.log(arr+'');// fill() 方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引。const array1 = [1, 2, 3, 4];console.log(array1.fill(0, 2, 4));console.log(array1.fill(5, 1));console.log(array1.fill(6));//includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回falseconst array1 = [1, 2, 3];console.log(array1.includes(2));// trueconst pets = ['cat', 'dog', 'bat'];console.log(pets.includes('cat'));//trueconsole.log(pets.includes('at')); //false//keys() 方法返回一个包含数组中每个索引键的Array Iterator对象。const array1 = ['a', 'b', 'c'];const iterator = array1.keys();for (const key of iterator) {console.log(key);} //0, 1,2// reduceRight() 方法接受一个函数作为累加器(accumulator)和数组的每个值(从右到左)将其减少为单个值。const array1 = [[0, 1], [2, 3], [4, 5]].reduceRight((accumulator, currentValue) => accumulator.concat(currentValue));console.log(array1);// expected output: Array [4, 5, 2, 3, 0, 1]// values() 方法返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值const array1 = ['a', 'b', 'c'];const iterator = array1.values();for (const value of iterator) {console.log(value);} //’a’,’b’,’c’

欢迎关注我的原创文章:小伙伴们!我是一名热衷于前端开发的作者,致力于分享我的知识和经验,帮助其他学习前端的小伙伴们。在我的文章中,你将会找到大量关于前端开发的精彩内容。

学习前端技术是现代互联网时代中非常重要的一项技能。无论你是想成为一名专业的前端工程师,还是仅仅对前端开发感兴趣,我的文章将能为你提供宝贵的指导和知识。

在我的文章中,你将会学到如何使用HTML、CSS和JavaScript创建精美的网页。我将深入讲解每个语言的基础知识,并提供一些实用技巧和最佳实践。无论你是初学者还是有一定经验的开发者,我的文章都能够满足你的学习需求。

此外,我还会分享一些关于前端开发的最新动态和行业趋势。互联网技术在不断发展,新的框架和工具层出不穷。通过我的文章,你将会了解到最新的前端技术趋势,并了解如何应对这些变化。

我深知学习前端不易,因此我将尽力以简洁明了的方式解释复杂的概念,并提供一些易于理解的实例和案例。我希望我的文章能够帮助你更快地理解前端开发,并提升你的技能。

如果你想了解更多关于前端开发的内容,不妨关注我的原创文章。我会不定期更新,为你带来最新的前端技术和知识。感谢你的关注和支持,我们一起探讨交流技术共同进步,期待与你一同探索前端开发的奇妙世界!

相关文章:

JavaScript中数组的方法和函数作用域问题

1 -函数作用域问题-: 函数的外层作用域&#xff0c;在函数创建时就已确定&#xff0c;和函数的调用位置无关 var name 嘿嘿;// 函数的外层作用域&#xff0c;在函数创建时就已确定&#xff0c;和函数的调用位置无关// JS中的作用域被称为 词法作用域function fn() {console.…...

nodejs设置x-xss-protection解决xss问题

在Node.js中设置X-XSS-Protection可以通过使用helmet库来完成。 首先&#xff0c;确保已经安装了helmet库。如果没有安装&#xff0c;可以运行以下命令进行安装&#xff1a; npm install helmet --save 然后&#xff0c;在你的Node.js应用程序中引入并配置helmet库&#xff…...

C/C++不同整数类型的区别

在C/C中涉及的整数相关的类型大致有如下几种&#xff1a; char、unsigned charshort、unsigned shortint、unsigned intlong、unsigned longlong long、unsigned long longint8_t、uint8_tint32_t、uint32_tint64_t、uint64_tDWORDDWORD32、DWORD64size_t、ssize_tSIZE_T、SSI…...

如何理解JDK、JRE、JVM区别与联系

摘要&#xff1a;JDK是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录&#xff0c;里面有两个文件夹bin和lib&#xff0c;在这里可以认为bin里的就是jvm&#xff0c;lib中则是jvm工作所需要的类库&#xff0c;而jvm和 lib合起来就称为jre。 一、JDK JDK(Ja…...

用友GRP-U8 SmartUpload01 文件上传漏洞

漏洞描述 用友GRP-U8行政事业内控管理软件是一款专门针对行政事业单位开发的内部控制管理系统&#xff0c;旨在提高内部控制的效率和准确性。该软件/u8qx/SmartUpload01.jsp接口存在文件上传漏洞&#xff0c;未经授权的攻击者可通过此漏洞上传恶意后门文件&#xff0c;从而获取…...

react 路由v6

这里是区别&#xff1a;V5 vs V6 这里是官网&#xff1a;可以查看更多高级属性 一、基本使用&#xff1a; 1、配置文件 src/routes/index import React from "react";const Home React.lazy(() > import("../Pages/Home")); const About React.laz…...

rpc【通义】rpc原理【gpt】

一 rpc RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种编程技术&#xff0c;它允许在分布式系统中的一个程序像调用本地函数一样调用另一个程序&#xff08;位于不同的机器或进程中&#xff09;的函数或方法。RPC的主要目标是隐藏网络通信的…...

Leetcode 2973. Find Number of Coins to Place in Tree Nodes

Leetcode 2973. Find Number of Coins to Place in Tree Nodes 1. 解题思路2. 代码实现 题目链接&#xff1a;2973. Find Number of Coins to Place in Tree Nodes 1. 解题思路 这道题思路上其实挺简单的&#xff0c;就是一个遍历的思路&#xff0c;找到每一个点对应的子树当…...

如何调动销售人员使用CRM的积极性?

CRM系统在销售人员眼中是流程监管工具也是单调枯燥的操作空间&#xff0c;如何让销售爱上CRM系统&#xff1f;1.让CRM简化销售工作&#xff1b;2.智能提醒销售各项事务&#xff1b;3.让CRM界面更加丰富多彩&#xff0c;通过这些方法帮助销售经理轻松管理团队&#xff0c;销售对…...

数值分析期末复习

第一章 科学计算 误差 解题步骤 x : 真实值 x:真实值 x:真实值 x ∗ : 近似值 x^*:近似值 x∗:近似值 先求绝对误差 e ∗ e^* e∗: x − x ∗ x - x^* x−x∗ 绝对误差限是 ∣ x − x ∗ ∣ ≤ ε |x - x^{*}| \le \varepsilon ∣x−x∗∣≤ε 求相对误差限: ∣ x − x ∗…...

k8s的探针

一、探针原理 分布式系统和微服务体系结构的挑战之一是自动检测不正常的应用程序&#xff0c;并将请求&#xff08;request&#xff09;重新路由到其他可用系统&#xff0c;恢复损坏的组件。健康检查是应对该挑战的一种可靠方法。使用 Kubernetes&#xff0c;可以通过探针配置运…...

Python 爬虫之下载视频(五)

爬取第三方网站视频 文章目录 爬取第三方网站视频前言一、基本情况二、基本思路三、代码编写四、注意事项&#xff08;ffmpeg&#xff09;总结 前言 国内主流的视频平台有点难。。。就暂且记录一些三方视频平台的爬取吧。比如下面这个&#xff1a; 一、基本情况 这次爬取的方…...

Gradle下载地址

Gradle下载地址 Gradle是一个基于JVM的构建工具&#xff0c;是一款通用灵活的构建工具&#xff0c;Gradle也是第一个构建集成工具&#xff0c;与ant、maven、ivy有良好的相容相关性。支持maven&#xff0c; Ivy仓库&#xff0c;支持传递性依赖管理&#xff0c;而不需要远程仓库…...

顺序表的实现(头插、尾插、头删、尾删、查找、删除、插入)

目录 一. 数据结构相关概念​ 二、线性表 三、顺序表概念及结构 3.1顺序表一般可以分为&#xff1a; 3.2 接口实现&#xff1a; 四、基本操作实现 4.1顺序表初始化 4.2检查空间&#xff0c;如果满了&#xff0c;进行增容​编辑 4.3顺序表打印 4.4顺序表销毁 4.5顺…...

VMware虚拟机安装Ubuntu系统教程

所使用的文件如下&#xff1a; VMware Workstation 17 Pro ubuntu-22.04.3-desktop-amd64.iso 一、ubuntu 命名规则及各版本一览表 1.ubuntu 命名规则&#xff1a; 例如&#xff1a;ubuntu 16.04 LTS 是长期维护版本&#xff1b;ubuntu 17.04 是新特性版本 前两位数字为发…...

41 sysfs 文件系统

前言 在 linux 中常见的文件系统 有很多, 如下 基于磁盘的文件系统, ext2, ext3, ext4, xfs, btrfs, jfs, ntfs 内存文件系统, procfs, sysfs, tmpfs, squashfs, debugfs 闪存文件系统, ubifs, jffs2, yaffs 文件系统这一套体系在 linux 有一层 vfs 抽象, 用户程序不用…...

C++面试宝典第9题:找出第K大元素

题目 给定一个整数数组a,同时给定它的大小N和要找的K(1 <= K <= N),请根据快速排序的思路,找出数组中第K大的数(保证答案存在)。比如:数组a为[50, 23, 66, 18, 72],数组大小N为5,K为3,则第K大的数为50。 解析 这道题主要考察应聘者对于快速排序的理解,以及实…...

“马屁精”李白

“李白一斗诗百篇&#xff0c;长安市上酒家眠。天子呼来不上船&#xff0c;自称臣是酒中仙。”这是诗圣杜甫笔下的李白&#xff0c;也是我们脑海里坚信无二的李白。恃才傲物又狂放不羁的诗仙&#xff0c;怎么会低眉顺眼地去拍人马屁呢&#xff1f; 但我要说的是&#xff0c;人…...

python之glob的用法

目录 获取特定扩展名的所有文件 获取特定目录下的所有文件 递归获取所有文件 转义特殊字符 iglob glob 是 Python 中用于文件模式匹配的一个模块。它使用 Unix shell-style 的通配符来进行匹配&#xff0c;并返回所有匹配的文件路径列表。 下面是一些 glob 的基本用法&am…...

【adb】电脑通过ADB向手机传输文件

具体步骤如下&#xff1a; Step1 下载ADB工具 下载最新版本的 ADB工具 !!! 注意&#xff1a;一定要是最新版本的ADB&#xff0c;否则很可能导致无法识别到手机。 将下载的ADB解压以后的文件如下图所示&#xff1a; Step2 添加环境变量 将 ADB的路径 D:\platformtools &…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...