JavaScript学习笔记(四)-- 数组

136 阅读7分钟

数组

  • 什么是数组?
  • 字面理解就是 数字的组合
  • 其实不太准确,准确的来说数组是一个 数据的集合
  • 也就是我们把一些数据放在一个盒子里面,按照顺序排好 [1, 2, 3, 'hello', true, false]
  • 这个东西就是一个数组,存储着一些数据的集合

数据类型分类

  • number / string / boolean / undefined / null / object / function / array / ...
  • 数组也是数据类型中的一种
  • 我们简单的把所有数据类型分为两个大类 基本数据类型 和 复杂数据类型
  • 基本数据类型: number / string / boolean / undefined / null
  • 复杂数据类型: object / function / array / ...
// 5个人的成绩为: 91,88,72,45,63
// 先声明一个数组,字面量的形式
var arr = [];
// 字面量:从字面上可以看出数据的类型;
var a = "null";


// 输出 []  这是一个没有数据在里面的数组,称为空数组
console.log(arr,typeof arr); 

存值

  • 数组中的数据使用索引管理。
  • 索引 下标:位置:方便放入存值和寻找;
  • 索引 规则:用数字表示,从0开始
//把成绩存储到数组中
arr[0] = 91;
arr[1] = 88;
arr[2] = 72;
arr[3] = 45;
arr[4] = 63;
console.log(arr); // 输出 [91,88,72,45,63] 就是一个数据集合

  • 把 数组[索引]格式当成一个变量使用就行,
// 初始化赋值完成后,也可以再次改变值,把前面的值覆盖掉;
arr[0] = 100;
  • 如果一开始就知道数组了,可以直接使用一个简单的语法存储数据

var arr = [91,88,72,45,63];
console.log(arr); // 输出的结果是一样的

  • 上面每个位置上存的都是数字类型,可以为其他类型;

取值

  • 把数据取出来,得知道你要取哪个位置上的数据把。
  • 数据取值同样使用索引取。
// 拿到索引为0,顺序上第一个位置上的数据;
// 把 数组[索引] 格式当成一个变量使用就行;
console.log(arr[0]);

// 数组求和:班里的成绩总和
var sum = arr[0] + arr[1] + arr[2] + arr[3] + arr[4];
console.log(sum); // 输出370

遍历

  • 求成绩总和:一个一个地把数组里面的数组取出来了,从索引 0 到最后一个索引,
  • 索引从0开始到结束的过程,有重复的思想,需要用到循环;
// 最初的写法
var sum = arr[0] + arr[1] + arr[2] + arr[3] + arr[4];

// 循环 这个从0~最后一个索引,有重复的思想在里面,使用循环。
var sum = 0;
for(var i = 0; i <= 4; i++){
  sum += arr[i];
}
console.log(sum); // 输出 370,和我们一个一个相加是一样的

  • 使用循环来遍历数组,当数组中的数据比较多的时候,会比较方便。一般是使用for循环;

数组长度

语法

  • 存取数据:涉及到就是数组的顺序问题,通过索引去存取;
  • 数组长度:数组中一共存放了多少个数据;
console.log(arr.length); // 数组.length 就是数组的长度
  • 如果数组的长度是5,最后一个元素的索引就是4(数组的索引从 0 开始);
  • 我们发现最大索引总是比长度少 1 ,所以遍历还可以这么写
for(var i = 0; i <= arr.length - 1; i++){
  console.log(arr[i]);
}

// 简化一下 
for(var i = 0; i < arr.length; i++){
  console.log(arr[i]);
}

数组的构造函数

  • 数组在JS中还可以使用另一种方式创建,这个方式我们称为 : 构造函数
  • 构造函数:能构造一个你需要的东西(对象);
// 使用 构造函数 创建数组
var arr = new Array();
// 存储数据
arr[0] = 10;
arr[1] = 20;
console.log(arr);

var arr = new Array(10,20);
console.log(arr);
  • 注意:一个数据,不要使用这个方式存储数据;它会认为你想要设置数组的长度,而不是要把数据存储在数组中。
var arr = new Array(10);
console.log(arr); // 输出 [empty × 10]
  • arr.length = 0;

冒泡排序

  1. 给一组数字数组,将该数组中的数据排序(按照从小到大的规则) 冒泡排序 ☞ 排序: 按照从小到大方式排序(升序) | 按照从大到小排序(降序)

  2. 冒泡排序 ✔ 比较 (遍历) ✔ 交换位置 (找一个中间变量)

<script type="text/javascript">
		
		// 升序排列: 从小到大
		// 降序排列: 从大到小
		var ary = [1,200,30,4,5,6,70,8,9];
		//循环的趟数
		for(var i = 0;  i < ary.length-1; i++) {

			//每趟的次数
			for(var j = 0; j < ary.length-1-i; j++) {

				//交换位置
				if(ary[j] > ary[j+1]) {

					 var z = ary[j];

					 ary[j] = ary[j+1];

					 ary[j+1] = z;

				}
			}
		}
		console.log(ary);
	</script>

案例:小娜V1.0

  • 需求
    • 输入q:完全退出;
    • 输入1:得到求和功能,我们输入"数字,数字,数字"的格式,帮我们计算出我们的输入的和;
    • 输入2:获得当前时间;
    • 输入3:随机给我讲一个笑话;
    • 不q:一直循环 提示 可以 输入1/2/3、q这些功能点;

功能

  • 循环与退出
    • 使用wihle,设置条件为true,一直循环;

      	while(true){
      	}
      
    • 在内部使用变量接受用户输入的信息,使用固定值switch case 判断用户输入的是哪种情况

     while(true){
      var result = prompt('你好,我是小娜,请输入下面的数字,决定你要干什么。    \n1-计算综合,\n2-获取时间,\n3-讲个笑话');  
      switch (result) {
        case 'q':      
        break;
       }
    }
     
    
    • 退出功能:使用break退出while,
      while(true){
      var result = prompt('你好,我是小娜,请输入下面的数字,决定你要干什么。\n1-计算综合,\n2-获取时间,\n3-讲个笑话');  
      switch (result) {
         	case 'q':
       		// 如果在这里写break,会被认为是switch case 的break,所以该处不能这样使用,应该在外面使用if进行判断;
      	   break;
       	   break;
      }
      
      if(result=='q'){
       alert('你不爱小娜了吗');
            break;
         }
      }
      
      

获取时间

  • 需求:输入2,获取当前时间;

    • 在js中,要获取系统的当前日期和时间,需要用到一个js自带的Date对象 ,
    • 现在先不用管什么是对象,先学习如何使用,对象能给我们带来什么作用
    	// 创建Date对象
    	var date = new Date();
    	console.log(data); // 系统时间不同,输出的结果也会不同,但是都是输出当前系统的时间
    	// 获取时间对象的各个部分,对象.方法();
    	// 获取年份
    	var year = date.getFullYear();
    	console.log(year);
    
    	// 获取月份 , 得到的月份是从0开始的 ,使用 0-11 表示 1-12 月
    	var month = date.getMonth();
    	console.log(month);
    
    	// 获取天
    	var day = date.getDate();
    	console.log(day);
    
    	// 获取小时
    	var hour = date.getHours();
    	console.log(hour);
    
    	// 获取分钟
    	var minute = date.getMinutes();
    	console.log(minute);
    
    	// 获取秒数
    	var second = date.getSeconds();
    	console.log(second);
    
    
    • 为了格式上的好看:单位数,补位成双位数;
    if(day < 10){
    day = '0' + day;
     }
    

随机笑话

  • 需求:输入3,随机给我讲个笑话;

    • 随机值:每次给你的值,一般情况下是不一样的。
    • 有给随机值的一个对象Math;
         // 获取随机数
         var r = Math.random();
      
         // 输出一个在 [0,1) 之间的浮点数,可以得到0,但是无法得到1
         console.log(r); 
      
    • 如果想要得到一个随机整数,需要把整机浮点数 乘以 一个 倍数,再取整,
    // 获取 [0,10) 之间的随机浮点数,随机的一个值,
     	var r = Math.random() * 10;
    
    
    • 取整:向下取整,向数轴的左边获取最近的一个整数
    	// 向下取整
    	var a = Math.floor(1.12);
    	console.log(a); // 输出1
    	var b = Math.floor(1.99);
    	console.log(b); // 输出1
    	var c = Math.floor(-3.2);
    	console.log(c); // 输出 -4
    	var d = Math.floor(3.9);
    	console.log(d); // 输出 -4
    
    
    • 获取一个随机整数

      	// 获取一个 [0,10] 之间的随机整数
      	var r = Math.random();
      	r = r * (10 + 1) ;// 因为 Math.random得到的是不能得到1的浮点数,我们等下要向下取整,就得不到10了, * 11 向下取整才能得到10
      	r = Math.floor(r);
      	console.log(r); // 得到一个在 [0,10] 之间的整数
      
      
  • 分析:随机来个笑话:

    • 笑话是个数字,有很多效果,我不知道要哪个;
    • 随机给我来一个,随机的下标就可以;
    • 随机的下标:随机的整数;看整数的范围:数组的长度;
      var index = Math.random();  // [0,1)
      index *= list.length ; // [0,5)
      // 最后一条永远拿不到,让最后一个笑话为空;
      index = Math.floor(index); // [0,4]