数组
- 什么是数组?
- 字面理解就是 数字的组合
- 其实不太准确,准确的来说数组是一个 数据的集合
- 也就是我们把一些数据放在一个盒子里面,按照顺序排好 [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;
冒泡排序
-
给一组数字数组,将该数组中的数据排序(按照从小到大的规则) 冒泡排序 ☞ 排序: 按照从小到大方式排序(升序) | 按照从大到小排序(降序)
-
冒泡排序 ✔ 比较 (遍历) ✔ 交换位置 (找一个中间变量)
<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]