一、arguments
arguments是一个对应于传递给函数的参数的类数组对象。- 一般情况下除使用形参来接收实参的值之外,还可以用
arguments来接收实参,他是一个伪数组
二、数组
- 数组基础
- 数组是引用数据类型
- 他用来存储一组相同数据类型的数据,虽然也可以存储不同数据类型的数据但是那样不规范
var i =[1,2,3,4]
- 数组的下标是访问数组的值的方法:i[index]
- i.length表示的是数组的长度。每一次赋值之后数组的长度也会发生改变
- 数组是一个对象
var arr = new Array(1,2,3); // new是实例化对象,Array是构造函数,用来产生对象 Array只有一个值时表示数组的长度
var arr = [1,2,3];
console.log(arr[10]) // 此时因为arr[10]即角标为10的位置没有存放数据 所以结果为undefined
arr[10] = 20// 变相增加了数组的长度
console.log(arr.length); // 11
// 此时数组内的值为
console.log(arr);// [1, 2, 3, 空属性(empty) × 7, 20]
- 数组的赋值
// 作用:产生一个规定位数随机数,并且赋予数组
// 参数:n 产生几个数
// 返回值:一个数组
function suijiArr(n){
var arr = []
// 生成10个随机数存入数组
for( i = 0; i < n; i++ ){
arr[i] = suiji(0,100);
}
return arr;
}
// 作用:封装一个生成 min - max 之间的随机数的函数
// 参数:min:number 随机数区间的最小值
// max: number 随机数区间的最大值
// 返回值: number 一个min - max之间的随机数
function suiji(min,max){
var m = Math.floor(Math.random()*(max - min) + min);
return m;
}
- 数组的遍历
// 数组的遍历
var arr = [8,5,8,4,6,1, ,4,8]
// 方法一 普通的for循环
for(i = 0; i < arr.length; i++ ){
// 挨个遍历出每一个角标的值
console.log(arr[i])
}
// 方法二 for in
// 用于遍历对象的角标,值是字符串数据类型.但是会出现bug 会自动过滤掉空值
for(var i in arr){
console.log(arr[i])
}
// 方法三 for of 遍历对象的值
for(var v of arr){
console.log(v)
}
- 冒泡排序
// 冒泡排序 数组中的值从小到大排序
var arr = [9,6,5,4,1];
// 思路
// 第一轮循环 拿到最大的值挨个作比较放在最后面
// 9 6 6 9 5 4 1
// 9 5 6 5 9 4 1
// 9 4 6 5 4 9 1
// 9 1 6 5 4 1 9
// 第二轮循环 拿到第二大的值放在倒数第二个
// 6 5 5 6 4 1 9
// 6 4 5 4 6 1 9
// 6 1 5 4 1 6 9
// 6 9 5 4 1 6 9 多循环了一次
// 第三轮循环 拿到第三大的值
// 5 4 4 5 1 6 9
// 5 1 4 1 5 6 9
// 5 6 多循环了两次
// 5 9
// 第四轮循环 拿到第四大的值
// 4 1 1 4 5 6 9
// 4 5 多循环了四次
// 4 6
// 4 9
// 代码实现
// 外层循环一共循环4次即长度减一次
for(i = 0 ; i < arr.length; i++){
// 内层循环 相邻两个数挨个做比较 大的数与小的交换位置,让更大的数字相后靠
for(j = 0 ; j < arr.length - 1 -i ;j++){
// 判断如果大就交换位置
if(arr[j] > arr[j+1]){
var t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t
}
}
}
console.log(arr)
- 选择排序
var arr = [8,2,5,4,6,1]
// 选择排序是假设第一个为最小值,依次对比记下角标,直到对比到最后一个值,才开始对第一个值和最小的值进行交换
// 选择排序减少了循环对比的次数和交换的次数
// 外层循环 控制着整体的循环次数,一共循环长度减一次
for(var i = 0; i< arr.length - 1; i++){
// 假设第i个角标的值是最小值
var min = i;
// 内存循环 控制着每一个数一次对比循环 且每一次循环的初始值都是上一次循环加一开始
for(var j = i + 1 ;j < arr.length; j++){
// 找到比当前值还要小的值时,即min目前对应的数比这个比较数还大,将其角标赋给min
if(arr[min] > arr[j]){
min = j;
}
}
// 内部循环一次结束之后,开始对当前的第一个角标的值和min此刻所对应的最大值进行交换
// 注意,若此刻的min就是最小值那就不用做交换
if(min != i){
var t = arr[i];
arr[i] = arr[min]
arr[min] = t
}
}
// 打印这个经过选择排序后的数组
console.log(arr)
- 数组的基本方法
- push() 向数组尾部追加值 可以有多个参数
var arr = [1,2,3]
// push()向数组尾部追加值 可以有多个参数
arr.push(5,6,5,4)
console.log(arr) //[1, 2, 3, 5, 6, 5, 4]
- pop()删除 在数组尾部删除1个值,无参数
var arr = [1,2,3]
arr.pop()
console.log(arr) // [1, 2]
3.unshift()向数组的头部追加值
var arr = [1,2,3]
arr.unshift(0,0,0);
console.log(arr);//[0, 0, 0, 1, 2, 3]
4.shift() 向数组的头部删除一个值
var arr = [1,2,56,4,5]
arr.shift();
console.log(arr); //[2, 56, 4, 5]
- push的封装
// push的封装
function push(){
var arr = []
// 用arguments接收实参列表 他是一个关键字,不用特地去声明,遍历这个存储在arguments里的实参列表
for(var i = 0; i <= arguments.length;i++ ){
arr[arr.length] = arguments[i]
}
return arr
}
console.log(push(1,2,1,3))
- pop的封装
<script>
// pop的封装 重新装在另一个数组里面
function pop(){
var arr = [1,2,3]
var arr2 = []
for(i = 0;i < arr.length - 1 ;i++){
arr2.push(arr[i])
}
return arr2
}
console.log(pop())
</script>