JS数组7
来源:互联网 发布:python 爬虫库推荐 编辑:程序博客网 时间:2024/06/06 03:47
7.1 数组的概念
案例计算10名同学的平均分
<script> var a1,a2,a3,a4,a5,a6,a7,a8,a9,a10; a1 = Number(prompt("请输入分数")); a2 = Number(prompt("请输入分数")); a3 = Number(prompt("请输入分数")); a4 = Number(prompt("请输入分数")); a5 = Number(prompt("请输入分数")); a6 = Number(prompt("请输入分数")); a7 = Number(prompt("请输入分数")); a8 = Number(prompt("请输入分数")); a9 = Number(prompt("请输入分数")); a10 = Number(prompt("请输入分数")); var ave = (a1+a2+a3+a4+a5+a6+a7+a8+a9+a10)/10; alert(ave);</script>
这样的代码量是和人数成正比的,数量多了还好,数量多了要写无数的代码。
但是尝试了一下发现,循环使用不上,因为无法去控制变量a1,a2,也就是无法将循环控制变量和变量a1、a2练习起来。
<script> var a = []; var sum = 0; for (var i = 0; i < 10; i++) { a[i] = Number(prompt("请输入分数")); sum += a[i]; } var ave = sum / a.length; alert(ave);</script>
这段代码能够实现同样的功能,而且如果是100人的话,只要把循环的条件改为i<100即可,整个程序的结构和代码量和人数多少没有关系。
我们把变量的表达方式改变了,即名称+序号的方式(a[0]、a[1]……),那么序号是可以用循环变量来控制。
7.2 数组的定义与元素访问
定义有三种方式
(1)var a = [];
(2)var a = new Array();
(3)var a = [0,0,0];
访问元素:数组名+下标
a[0] a[3]
需要注意的是下标是从0开始的,所以在使用的时候需要注意越界问题,比如5个元素的数组,那么他的下标范围为【1,4】,不包括5,5’5,5已经越界了。
数组的本质:一组变量的集合,或者说是一组内存单元。只不过对于变量的表示方式使用的是数组名+下标的方式。
7.3 数组的常用属性和方法
数组的属性(length):
(1).告诉我们数组的长度:数组名.length
(2).通过该属性可以改变数组的长度
<script> var a = []; var sum = 0; for (var i = 0; i < a.length; i++) { a[i] = Number(prompt("请输入分数")); sum += a[i]; } var ave = sum / a.length; alert(ave);</script>
数组的常用方法:
(1)unshift:在数组头部添加元素,返回值返回的是新添加的元素
shift:删除数组头部的元素,返回值是删除的头部元素
(2)indexOf:查找在数组中重复出现的元素第一次出现的位置,返回值是该元素的下标。
lastIndexOf:查找数组中重复出现的元素最后一次出现的位置,返回值是该元素的下标。
(3)push:在数组的尾部插入元素,返回值是添加元素后数组的长度。
Pop:从数组的尾部删除最后一个元素,返回值是删除的元素。
(4)slice(前面开始位置的下标,后面结束位置的下标):提取数组中指定连续的子数组。前包括,后不包括
(5)splice(开始删除位置的下标,要删除位置的长度,选择插入或者替换的内容(splice中文有“剪接”的意思,也就是有“加”有“减”),前面两个参数定义“剪”的部分,第三个参数定义借“接”的部分,经过不同参数组合就可以实现以下三大功能):
【1】删除操作(删除数组中指定的任意元素);
【2】插入操作(在数组中指定位置插入元素);
【3】替换操作(在数组中替换指定位置的元素)。
(6)reverse:将数组中的元素,反序输出。在原数组的基础上进行反序输出,不会重新创建新数组。
(7)map:原数组的映射,经过函数的加工,返回给一个新的数组。
一般我们传递的参数都是数值、字符串等类型的数据,有些时候可能需要传递一个函数,那么如何去传递一个函数呢?
函数名就是函数传递入口的地址。
<script> var a = [2, 4, 6, 8]; var b = a.map(fun); alert(b); function fun(value, index, self) { return value * value; } alert(b);</script>
我们可以将以上内容简写为:
<script> var a = [2, 4, 6, 8]; var b = a.map(function (value, index, self) { return value * value; }); alert(b);</script>
这就是匿名函数。
7.5 数组的应用
(1)查找
Indexof系统提供
我们也可以实现自己的查找
a.顺序查找
<script> var a = [3,7,11,43,87,5,99,22,51,8]; var num = Number(prompt("请输入要查找的值")); var index = -1;//最初认为要找的数不在数组中 for (var i in a){ if(a[i]==num){ index = i; break; } } alert(index);</script>
这种查找方法最简单,但是查找次数与数据量成正比,效率不高。
b.折半查找(二分查找)
<script> /* * 思路: * (1)用left表示查找范围的起点,end表示终点 * (2)只要start<=end就重复一下步骤3 * (3)和中间位置(mid)的那个数进行比较 * a、相等:找到了,结束 * b、大于:在前半段找,即end=mid-1 * c、小于:在后半段找,即start=mid+1 * */ var a = [3, 5, 7, 8, 11, 22, 43, 51, 87, 99]; var num = Number(prompt("请输入要查找的值")); var index = -1;//最初认为要找的数不在数组中 var start = 0; var end = a.length - 1; while (start <= end) { var mid = Math.ceil((start + end) / 2);//计算中间位置(Math.ceil()取整) if (num == a[mid]) { index = mid; break; } else { if (num > a[mid]) { //在后半段找 start = mid + 1; } else { //在前半段 end = mid - 1; } } } alert(index);</script>
假设在一个已经有序的数组中,可以利用折半查找大幅度提高效率。
折半查找的最坏查找次数与数量的关系是对数关系,所以说它的查找次数高,但是任何事都有两面性,他的高效率也要有高代价,也就是要求有序。
(2)排序(冒泡排序)
<script>//冒泡排序 var a = [3, 7, 11, 43, 87, 5, 99, 22, 51, 8]; // var num = Number(prompt("请输入要查找的值")); for (var i = 1; i < a.length - 1; i++) { for (var j = 0; j <= a.length - i - 1; j++) { //不满足升序就对调 if (a[j] > a[j + 1]) { var t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } alert(a.toString());</script>
(选择排序法)
(3)队列
先进先出(FIFO),在头部出队(shift),在尾部入队。
<script> var a =[]; a.push(1); document.write(a.toString()+"</br>"); a.push(2); document.write(a.toString()+"</br>"); a.push(3); document.write(a.toString()+"</br>"); a.shift(); document.write(a.toString()+"</br>"); a.shift(); document.write(a.toString()+"</br>"); a.shift();</script>
(4)堆栈
先进后出(FILO),在尾部进栈(pop),在尾部出
<script> var a =[]; a.push(1); document.write(a.toString()+"</br>"); a.push(2); document.write(a.toString()+"</br>"); a.push(3); document.write(a.toString()+"</br>"); a.pop(); document.write(a.toString()+"</br>"); a.pop(); document.write(a.toString()+"</br>"); a.pop();</script>
- JS数组7
- js数组
- js数组
- JS 数组
- js 数组
- js数组
- JS数组
- js数组
- js 数组
- JS 数组
- js数组
- js 数组
- JS数组
- js数组
- js数组
- js数组
- JS 数组
- js数组
- 教你关闭一个不活动的或者空闲的SSH会话
- bash脚本运行出现未知错误
- JavaScript进阶:谈谈对闭包的理解
- ThreadPool 之 线程池工具类 Executors
- Angular组件之间的通信
- JS数组7
- 快速排序
- 莫比乌斯反演
- js鼠标事件(一)实现banner的轮播效果
- 深入理解线程局部变量:ThreadLocal
- Java-jar包的简单操作
- JavaScript中的字符串,数组,替换
- A-B Game --贪心
- 最小生成树(MST)的Kruskal实现