【JS学习笔记】8.JavaScript数组(数组,for....in循环,二维,冒泡排序)

文章目录

    • 数组的基本
        • 1.定义一个数组:
        • 2.向数组中的元素赋值:
        • 3.获取数组中的元素
        • 4.用length属性,获取数组的大小,并使用循环遍历数组的每个元素
    • 创建数组的方法
          • 方式一:直接使用new Array();
          • 方式二:使用数组字面量
      • 补充知识:for...in循环
    • 数组的常用方法
          • 排序法sort();
          • 反转 reverse()
          • 拼接操作join(),concat()
            • join():将数组拼接为string
            • concat()将多个数组拼接成一个数组
          • 转换toString(),valueOf()
            • toString()将数组转换为字符串
            • valueOf()返回数组对象本身
          • 迭代数组forEach()
    • 二维数组
    • 冒泡排序

数组的基本

数组:

  • 是一个变量,用来储存一组数据
  • 大小可以动态调整,没有长度限制
  • 可以存储任意类型的数据

*申明一个变量就是在内存空间划出一块核实的空间
*而声明一个数组就是在内存空间中划出一串连续的空间

1.定义一个数组:

var scroes=new Array();

2.向数组中的元素赋值:

		scroes[0]=95;
		scroes[1]=90;
		scroes[2]=98;

3.获取数组中的元素

		console.log('数组scores中的第一个元素:' + scroes[0]);//元素索引是从0开始的
		console.log('数组scores中的第二个元素:' + scroes[1]);
		console.log(scroes);//直接输出数组名称,会按顺序输出数组中的元素的值

元素下标:用来对数组中的元素进行编号,下标从0开始,通过下标访问数组中的元素,下标也称为元素索引。

4.用length属性,获取数组的大小,并使用循环遍历数组的每个元素

		for(var i = 0;i

新创建的数组中没有元素,长度为0
数组中的元素,如果没有赋值,默认为undefind
每当我们向数组中添加元素时,length属性的值都会改变

例:循环获取10名学生的姓名,保存到数组中,然后输出。

		var students=new Array();
		for(var i=0;i<10;i++){
			students[i]=prompt('请输入弟' +(i+1) + '学生的名字!');//获取用户输入的名字,保存至元素中
		};
		document.write('学生信息如下:
'); for(var i=0;i'); };

例2:将1到100之间,能被3整除的整数,存放到数组nums中,然后输出统计个数。

		var nums=new Array();
		var index=0
		for(i=1;i<=100;i++){
			if(i%3==0){
				nums[index]=i;
				index++;
			};
		};
		for(i=1;i<=100;i++){
			if(i%3==0){
				nums[nums.length]=i;//每当向数组中添加元素时,length的属性的值就会改变
			};
		};
		console.log(nums.length);

创建数组的方法

方式一:直接使用new Array();
		var nums=new Array(3);//创建长度为3的数组
		console.log(nums.length); //3
		nums[3]=13;//数组长度会,自动扩展
		nums[4]=14;
		console.log(nums.length); //5

		//创建数组的同时,添加元素
		/*var names=new Array('Tom','Jack','Alice');
		console.log(names.length);  //3
方式二:使用数组字面量
		var nums=[]; //创建一个空数组
		nums[0]=1;
		nums[1]=2;

补充知识:for…in循环

用来对集合中的数据进行遍历
用法:

		for(var 循环变量 in 集合){

		};

其中循环的变量即为所遍历集合的索引

		var str='welcome';//可以将字符串看做由许多字符组成的集合
		for(var index in str){//index表示集合中每个元素的索引,并不是元素本身
			console.log(index);
		};

例子:提示用户输入一段英文,统计并输出其中元音字母(a,e,i,o,u)的个数

		var english=prompt('请输入一段英文');
		var conunt=0;
		for (var index in english){
			if (english[index]=='a'||english[index]=='e'||english[index]=='i'
				||english[index]=='o'||english[index]=='u') {
				count++;
			};
		};
		console.log('共有' + count +'个元音字母');

数组的常用方法

数组不仅可以使用非负整数作为索引下标,也可以使用字符串作为下标,一般称之为key(键),即为键值对;
并且key不会对length属性产生影响,所以不适合使用普通for循环,而应该使用for…in循环(不会自动跳过undefined的数据)

例:

		var array=[13,25,250,38];
		array[4]=16;
		array['age']=26;
		array['name']='jackson';
		console.log(array.length);//length属性无法获取字符串索引的元素
		for(var i=0;i
排序法sort();

用法:数组名.方法();
sort:默认按字符顺序排序,非string类型会转换为string

		var nums=[25,26,111,38,7,120,8,3,99];
		console.log('排序前:'+nums);//排序前:25,26,111,38,7,120,8,3,99
		nums.sort();
		console.log('排序后:'+nums);//排序后:111,120,25,26,3,38,7,8,99  
		//如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。
		var names=['tom','jack','mike','alice','lucy'];
		console.log('排序前:'+names);//排序前:tom,jack,mike,alice,lucy
		names.sort();
		console.log('排序后:'+names);//排序后:alice,jack,lucy,mike,tom
反转 reverse()

reverse:将数组元素倒序排列

		var names=['tom','jack','mike','alice','lucy'];
		console.log('反转前:'+names);//反转前:tom,jack,mike,alice,lucy
		names.reverse();
		console.log('反转后:'+names);//反转后:lucy,alice,mike,jack,tom
拼接操作join(),concat()
join():将数组拼接为string
		var names=['tom','jack','mike','alice','lucy'];
		var str=names.join();//默认将数组中的元素以逗号隔开
		var joinStr=names.join('-');//会使用-隔开
concat()将多个数组拼接成一个数组
		var nums=[25,26,111,38,7,120,8,3,99];
		var names=['tom','jack','mike','alice','lucy'];
		var hobbies=['eat','sleep','peas']
		var array=nums.concat(names);
		var test=nums.concat(names,hobbies);
		console.log(array);//[25, 26, 111, 38, 7, 120, 8, 3, 99, "tom", "jack", "mike", "alice", "lucy"]
		console.log(test);//[25, 26, 111, 38, 7, 120, 8, 3, 99, "tom", "jack", "mike", "alice", "lucy",'eat','sleep','peas']
转换toString(),valueOf()
toString()将数组转换为字符串
		var names=['tom','jack','mike','alice','lucy'];
		var str=names.toString();//功能与没有参数的join()方法相同
		console.log(str);
valueOf()返回数组对象本身
		var names=['tom','jack','mike','alice','lucy'];
		console.log(names.valueOf());
		console.log(names);//会自动调用valueOf()方法

该方法通常由 JavaScript 在后台自动调用,并不显式地出现在代码中

迭代数组forEach()

ES5中增加的

可以遍历数组
用法:

		数组.forEach(function(value,index){
			console.log(index +'='+value);
		});

有一点要注意的是,该方法无法遍历字符串索引的值

二维数组

JavaScript中本身只支持一维数组,不支持直接定义的二维数组,但是我们可以间接实现二维数组。
将一维数组中的每个元素定义为一个数组,即数组中的元素也是数组。
直接手动创建:

		var nums=new Array();
		nums[0]=new Array();
		nums[0][0]=13;
		nums[0][1]=15;
		nums[0][2]=7;
		nums[0][3]=29;
		nums[0][4]=26;
		nums[1]=new Array();
		nums[1][0]=2;
		nums[1][1]=8;
		nums[1][2]=12;
		nums[1][3]=85;
		nums[1][4]=100;	
		nums[2]=new Array();	
		nums[2][0]=11;
		nums[2][1]=22;
		nums[2][2]=33;
		nums[2][3]=44;
		nums[2][4]=55;	
		console.log('第一行第三列为:'+nums[0][2]); //7

使用二重循环输出:

		for(var i=0;i

使用循环来创建:

		//使用循环来创建4*4的二维数组
		var array=new Array();
		for(var i=0;i<4;i++){
			array[i]=new Array();
			for(var j=0;j<4;j++){
				array[i][j]=parseInt(Math.random()*99+1);
			};

		};

冒泡排序

排序法理论其实网上很多,因为这个方法适用于大部分现在的编程语言,这边我就摘抄一下理论概述:

冒泡排序算法的原理如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

交换数据的方法也简单,这边自己简单写下JS中的用法:

for(var i=0;i<数组名.length-1;i++{ // 外层为控制轮数,每一轮确定一个数字, 轮数公式为 n-1,即元素数量-1
	for(var j=0;j<数组名.length-i-1;j++{// 内层为控制比较次数, 次数公式为 n-1,即元素数量-轮数-1
		var 临时变量=数组[j];  //先把前一个数赋值给临时变量
		数组[j]=数组[j-1];//再把后一个数赋值给前一个数
		数组[j]=临时变量;//再把临时变量赋值给后一个数
		};
};

例:

		var nums=[25,26,111,38,7,120,8,3,99];
		console.log('初始值:'+nums); //初始值:25,26,111,38,7,120,8,3,99
		//外层循环控制轮数,每一轮确定一个数字
		for(var i=0;inums[j+1]){
					var temp=nums[j];
					nums[j]=nums[j+1];
					nums[j+1]=temp;
				};
			};
		};

		console.log('冒泡排序完整后的结果为:'+nums);  //冒泡排序完整后的结果为:3,7,8,25,26,38,99,111,120

我们可以看一下上例每一轮的交换结果:
第1轮,比较的结果为:25,26,38,7,111,8,3,99,120
第2轮,比较的结果为:25,26,7,38,8,3,99,111,120
第3轮,比较的结果为:25,7,26,8,3,38,99,111,120
第4轮,比较的结果为:7,25,8,3,26,38,99,111,120
第5轮,比较的结果为:7,8,3,25,26,38,99,111,120
第6轮,比较的结果为:7,3,8,25,26,38,99,111,120
第7轮,比较的结果为:3,7,8,25,26,38,99,111,120
第8轮,比较的结果为:3,7,8,25,26,38,99,111,120

注:此为个人学习笔记,如有补充可以选择在评论区留言或者无视。

你可能感兴趣的:(JavaScript)