javaScript 数组2021-07-20
JavaScript
目标
了解数组的概念
掌握数组的基本操作(插入,删除等)
一、数组
1.1、什么是数组
数组(Array)是有序的元素序列。 [1] 若将有限个变量的集合命名,那么这个名称为数组名。**组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量**。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把若干元素按有序的形式组织起来的一种形式。 [1] 这些有序排列的数据元素的集合称为数组。数组是用于储存多个相同类型数据的集合。
数组是有序的元素序列。
数组中的每一个元素都有一个属于自己的编号 编号从0开始 被称为下标。
一组数据的集合
数组 **是在内存中开辟一组连续的内存空间。数组会自动的为每一个数据(元素),添加一个编号,这个编号从0开始,这个编号称为下标,**数组中的数据又被称为,下标变量 分量
注意:js数组不区分数据类型。可以自动扩容。
java数组: 固定数据类型 ,不会自动扩容。
数组的中数据如何取出呢?
1.2、为什么用数组
为了方便
下标的作用,就是区分数组中的每一个数据。
1.3、数组的使用
1.3.1、数组的定义
方式一:
var arr=new Array();构造方法
var arr=new Array(5);创建一个初始长度为五的空数组
var arr=new Array(1,“a”,2);创建一个带有初始数据的数组;
方式二、 绝大多数情况下使用的都是第二种语法。我们可以在方括号中添加初始元:
var arr1=【】 构造方法
var arr1=【1,2,3,4,】;创建一个带有初始数据的数组;
1.3.2、数组的取值和赋值
数组可以存储任何类型的元素。
数组取值:数组名[下标];
数组赋值(修改):数组名[下标] = 要修改的值;
数组元素从 0 开始编号。
length属性的值是数组中元素的总的个数
let fruits = ["Apple", "Orange", "Plum"]; alert( fruits.length ); // 3
也可以用 alert 来显示整个数组。
我们可以通过方括号中的数字获取元素
let fruits = [“Apple”, “Orange”, “Plum”];
alert( fruits[0] ); // Apple
alert( fruits[1] ); // Orange
alert(fruits[2] ); // Plum
1.3.3、数组的遍历
for循环遍历
for in遍历
var arr=[12,213,24,23,45] for(var i=0;i<arr.length;i++){ console.log(arr[i]);//控制台输出 }
for(var i in arr){ console.log(arr[i]); }
1.4数组的操作增删改查
var arr1=[34,35,56,67,78,89]; alert(arr1+"你tm想在哪个后面插") function aaaa(a){ for(var i=0;i<arr1.length;i++){ if(arr1[i]==a){ break; } } if(-1<i && i<arr1.length){ return i; }else{ return -1; } } //求值对应的下标 var index1=aaaa(prompt("")); function bbb(index){ for(var j=arr1.length-1;j>index;j--){ arr1[j+1]=arr1[j] } var cr=prompt("插入什么") arr1[index+1]=cr; alert(arr1); } //插入一个数让其他数后移 function aaa(index){ for(var z=index;z<arr1.length;z++){ arr1[z]=arr1[z+1]; } arr1.length--; alert(arr1);} //aaa()+bbb()=插入一个数 bbb(index1); aaa(index1);
冒泡排序
var arr=[12,30,14,20,16,17,18,19];
for(var j=0;j<arr.length-1;j++){
for(var i=0;i<arr.length;i++){
if(arr[i]>arr[i+1]){
var temp =arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
} } } console.log(arr); 第一轮比较已将可以把最小的数字挪到最后一位,第二轮比较将第二小的数字移动到倒数第二位,下边依次。。。。
所以第一轮只需要比较6次,第二轮只需要比较5次,第三轮只需要比较4次,第四轮需要比较3次,第五轮需要比较2次,第六轮需要比较1次。
所以内层循环每次只需要比较arr.length-j-i次!
for(var j=0;j<arr.length-1;j++){ for(var i=0;i<arr.length-j-i;i++){ if(arr[i]>arr[i+1]){ var temp =arr[i]; arr[i]=arr[i+1]; arr[i+1]=temp; } } } console.log(arr);
扩展:选择排序,二分法 了解。
点击按钮改变页面背景颜色,使用数组作为数据源
<body> <button type="button" onclick="color1()">点我换颜色</button> <script type="text/javascript"> var i=0; var color=["red","blue","yellow","green","pink","black","pourple"]; function color1(){ document.body.style.backgroundColor=color[i]; i++; } if(i==7){ i=0; } </script> </body>
点击p标签时,改变p标签的背景颜色
body> <button type="button" onclick="color1()">点我换颜色</button> <p id="aaaa" onclick="aaa()" >点我换颜色 </p> <script type="text/javascript"> function aaa(){ var color=["red","blue","yellow","green","pink","black","pourple"]; document.getElementById("aaaa").style.backgroundColor=color[i]; i++; } if(i==7){ i=0; } </script> </body>
1.4常用的数组方法和函数
名称 | 描述 |
---|---|
join(’-’) | 将数组转换为使用符号连接的字符串 |
concat(arr1,arr2) | 与另一个数组合并为一个新数组 |
reverse() | 将数组反转 |
sort(function(){排序规则}) | 对数组进行排序 |
push(ele1,ele2) | 向数组末尾添加新元素 |
unshift(ele1,ele2) | 向数组的开头添加新元素 |
pop() | 删除数组中末尾的值 返回删除的值 |
shift() | 删除数组中开头的值 返回删除的值 与pop()相反 |
splice(1,2,3,4) | 删除、替换、插入数组元素 |
indexOf(ele) | 查找元素的下标位置 |
join
语法格式:
array.join(separator)
var arr=[12,13,14,15] var arr1=arr.join(';'); alert(arr1);//12;13;14;15
concat
语法格式:
string.concat(string1, string2, …, stringX)
var arr=[12,13,14,15]; var arr2=[21,23,24,25]; var arr3=arr.concat(arr2); alert(arr3);//12,13,14,15,21,23,24,25;
reverse
语法格式:
array.reverse()
var arr=[12,13,14,15] arr.reverse(); alert(arr); //15,14,13,12
sort
语法格式
array.sort(sortfunction)
数组的sort方法 括号的sort的函数排序方法例如
从小到大
var arr=[12,16,14,15]; arr.sort(function(a,b){return a-b}) alert(arr);
这里使用箭头函数会更加简洁:
arr.sort( (a, b) => a - b );
push
语法格式
Array.push();
var arr1=[12,13,14,15,16]; arr1.push(17); alert(arr1);
unshift
var arr1=[12,13,14,15,16]; arr1.unshift(17); alert(arr1);
pop()
var arr1=[12,13,14,15,16]; alert( arr1.pop());//16
shift
var arr1=[12,13,14,15,16]; alert( arr1.shift());
splice
var arr=[12,13,14,15,16]; delete arr[0]; alert(arr);//13,14,15,16;
元素被删除了,但数组仍然有 3 个元素
因为 delete obj.key 是通过 key 来移除对应的值。对于对象来说是可以的。但是对于数组来说,我们通常希望剩下的元素能够移动并占据被释放的位置。我们希望得到一个更短的数组。
splice
arr.splice(1,4)
删除 从哪一个下标开始,删除几个元素。
var arr=[12,13,14,15,16] arr.splice(1,4) alert(arr);
arr.splice(1,4,“sdfs”,“sdfs”);也可以删除后继续添加
indexOf
查询下标 注意注意注意===完全等于
var arr=[12,13,14,15,16] alert(arr.indexOf(12));//0
练习
1.书写五个文本框,对五个文本框中的内容进行排序——把排序后的内容重新放入五个框。
<body> <input type="" name="input" id="d1" value="" /><br> <input type="" name="input" id="d2" value="" /><br> <input type="" name="input" id="d3" value="" /><br> <input type="" name="input" id="d4" value="" /><br> <input type="" name="input" id="d5" value="" /><br> <button type="button" onclick="aaa()">排序</button> <script type="text/javascript"> function aaa(){ arr[0]=document.getElementById("d1").value; arr[1]=document.getElementById("d2").value; arr[2]=document.getElementById("d3").value; arr[3]=document.getElementById("d4").value; arr[4]=document.getElementById("d5").value; for(var j=0;j<arr.length-1;j++){ for(var i=0;i<arr.length;i++){ if(arr[i]>arr[i+1]){ var temp =arr[i]; arr[i]=arr[i+1]; arr[i+1]=temp; } } } alert(arr); document.getElementById("d1").value=arr[0]; document.getElementById("d2").value=arr[1]; document.getElementById("d3").value=arr[2]; document.getElementById("d4").value=arr[3]; document.getElementById("d5").value=arr[4]; } </script>
升级版
输入框没写和上面一样
//吧多个input的1值都赋值给inp 在让inp的值循环push给inpValue function aaa(){ var inp =document.getElementsByTagName("input"); var inpValue= new Array(5); for(var i=0;i<5;i++){ inpValue.push(inp[i].value); } inpValue.sort(function(a,b){return a-b}) inpValue.sort((a,b)>= a-b); for(var g=0;g<=inpValue.length;g++){ inp[g].value=inpValue[g]; } alert(inpValue); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南