一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情。
数组
问:之前学习的数据类型,只能存储一个值。如果我们想存储班级中所有学生的姓名,那么该如何存储呢?
答:可以使用数组(Array)。数组可以把一组相关的数据一起存放,并提供方便的访问(获取)方式。
// 1. 数组(Array):就是指一组数据的集合 存储在单个变量下的优雅方式。
// 2. 利用new 创建数组
var arr = new Array();// 创建了一个空的数组
// 3. 利用数组字面量创建
var arr = [];// 创建了一个空的数组
var arr1 = [1,2,'joy','123',true];
// 4. 我们数组里面的数据一定用逗号分隔
// 5. 数组里面的数据 比如1,2, 我们称为数组元素
// 6. 获取数组元素 格式 数组名[索引号]
console.log(arr1[2]);// joy
console.log(arr1);// 输出整个数组
var arr2 = ['马尔扎哈','玛卡巴卡','迪丽热巴'];
console.log(arr2[0]);
console.log(arr2[1]);
console.log(arr2[2]);
console.log(arr2[3]);// 因为没有这个数组元素 所以输出的结果是 undefined
数组遍历:
// 数组遍历 把数组从头到尾访问一遍
var arr = ['red','green','blue'];
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
//数组长度 数组名.length
//求数组的所有元素之和及平均值
var arr = [2,6,1,7,4];
var sum = 0;
var avg = 0;
for (var i = 0; i < arr.length; i++){
sum += arr[i];
}
avg = sum / arr.length;
console.log(sum,avg);// 想要输出多个变量 用逗号分隔即可
// 求数组[2,6,1,77,52,25,7]中的最大值
// 声明一个保存最大元素的变量 max。
// 默认最大值可以取数组中的第一个元素。
// 遍历这个数组,把里面每个数组元素和 max 相比较。
// 如果这个数组元素大于max 就把这个数组元素存到 max 里面,否则继续下一轮比较。
// 最后输出这个 max。
var arr = [2,6,1,77,52,25,7];
var maximum = arr[0];
for (var i =1; i < arr.length; i++) {
if (maximum < arr[i]) {
maximum = arr[i];
}
}
console.log('该数组里的最大值是:' + maximum);
// 将数组['red','green','black','pink'] 转换为字符串,并且用 | 或其他符号分隔
var arr = ['red','green','black','pink'];
var str = '';
var sep = '|';
for (var i =0; i < arr.length; i++) {
str += arr[i] + sep;
}
console.log(str);
新增数组元素:
// 1. 新增数组元素 修改length长度
var arr = ['red','green','blue'];
console.log(arr.length);
arr.length = 5;// 我们把数组元素改为了5 里面应该有5个元素
console.log(arr);
console.log(arr[3]);// undefined
// 2. 新增数组元素 修改索引号 追加数组元素
var arr1 = ['red','green','blue'];
arr1[3] = 'joy';
console.log(arr1);
arr1[0] = 'yellow';// 这里是替换原来的数组元素
console.log(arr1);
arr1 = '有点意思';
console.log(arr1);// 不要直接给 数组名赋值 否则里面的数组元素都没有了
var arr = [2,0,6,1,77,0,52,0,25,7,89];
var newArr = [];
//刚开始newArr.length 就是0
// var j = 0;
for (var i = 0; i < arr.length; i++) {
if (arr[i] > 10) {
// 新数组应该从0开始 依次递增
newArr[newArr.length] = arr[i];
// j++;
}
}
console.log(newArr);
//数组翻转
var arr = ['red','green','pink','purple'];
var newArr = [];
//刚开始newArr.length 就是0
for (var i = arr.length - 1; i >= 0 ; i--) {
newArr[newArr.length] = arr[i];
}
console.log(newArr);
//数组排序 这里用的是冒泡排序算法
var arr = [5,3,2,4,1];
for (var i = 0; i <= arr.length - 1; i++) { // 外层循环管趟数
for (var j = 0; j <= arr.length - i - 1; j++ ) { // 里面的循环管 每一趟的交换次数
//内部交换两个变量的值1 前一个盒后一个数组元素相比较
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log(arr);
函数
// 1. 求 1~100的累加和
var sum = 0;
for (var i = 1; i <= 100; i++) {
sum += i;
}
console.log(sum);
// 2. 求 10~50的累加和
var sum = 0;
for (var i = 10; i <= 50; i++) {
sum += i;
}
console.log(sum);
// 3. 函数就是封装了一段可以被重复执行调用的代码块 目的: 就是让大量代码重复使用
function getSum(num1, num2) {
var sum = 0;
for (var i = num1; i <= num2; i++) {
sum += i;
}
console.log(sum);
}
getSum(1, 100);
getSum(10, 50);
getSum(1, 1000);
- 函数声明:
// 函数声明分为两步: 声明函数 和 调用函数
// 1. 声明函数
// function 函数名() {
// //函数体
// }
function sayHi() {
console.log('hi~~');
}
// (1) function 声明函数的关键字 全部小写
// (2) 函数是做某件事情,函数名一般是动词
// (3) 函数不调用自己不执行
// 2. 调用函数
// 函数名();
sayHi();
//调用函数的时候千万不要忘记小括号
- 函数的参数:
// 我们可以利用函数的参数实现函数重复不同的代码
// function 函数名(形参1,形参2...) {// 在声明函数的小括号里面是 形参(形式上的参数)
// }
// 函数名(实参1,实参2...);// 在函数调用的小括号里面是实参(实际的参数)
// 3. 形参和实参的执行过程
function cook(aru) { // 形参是接收实参的 形参类似于一个变量
console.log(aru);
}
cook('鱼香肉丝');
cook('酸辣土豆丝');
// 1. 利用函数求任意两个数的和
function getSum(num1, num2) {
console.log(num1 + num2);
}
getSum(1, 3);
getSum(3, 8);
// 2. 利用函数求任意两个数之间的和
function getSums(start, end) {
var sum = 0;
for (var i = start; i <= end; i++) {
sum += i;
}
console.log(sum);
}
getSums(1, 100);
getSums(1, 10);
// 3. 注意点
// (1) 多个参数之间用逗号隔开
// (2) 形参可以看做是不用声明的变量
函数形参和实参个数匹配问题
function getSum(num1, num2) {
console.log(num1 + num2);
}
// 1. 如果实参的个数和形参的个数一致 则正常输出结果
getSum(1, 3); // 4
// 2. 如果实参的个数多于形参的个数 会取到形参的个数
getSum(9,3,2); // 12
// 3. 如果实参的个数小于形参的个数 多余的形参定义为undefined 最终的结果就是 NaN
// 形参可以看作是不用声明的变量 num2 是一个变量但是没有接受值 结果就是undefined
getSum(4); // NaN
//建议 我们尽量让实参的个数和形参相匹配
小结:
-
函数可以带参数也可以不带参数
-
声明函数的时候,函数名括号里面的是形参,形参的默认值是undefined
-
调用函数的时候,函数名括号里面的是实参
-
多个参数中间用逗号分隔
-
形参的个数可以和实参个数不匹配,但是结果不可预计,我们尽量要匹配