第二周day004

97 阅读3分钟

day004

一、数组排序
1. 冒泡排序
var arr=[12,3,25,4,7,687,6,354,534,8,62,33,4];
for(var j=1;j<arr.length;j++){
   for(var i=0;i<arr.length-j;i++){
    if(arr[i]>arr[i+1]){
	var m=arr[i];
	arr[i]=arr[i+1];
	arr[i+1]=m;
	}
    }
}
console.log(arr);

2. 数组的API排序(sort)

默认:将数组中的元素转为字符串后,再按位PK每个字符的unicode号(ascii码)!

  1. 按照数字升序排列
arr.sort(function(a,b){
    //a为后一个,b为前一个
    return a-b;
	})
2:按照数字降序排列:
arr.sort(function(a,b){
    return b-a;
})

强调: 1、以后只要网页上有排序功能,说明他的底层一定是一个数组,因为js之中只有数组可以排序

二、栈和队列

添加元素和删除元素的新方式

1. 栈

其实就是数组,只不过一端封闭了,只能从另一端进出
开头进:

arr.unshift(新值,...);
//缺点:添加元素的新方式,
//向前添加:缺点:导致其他元素的下标都会发生变化

开头出:

var first=arr.shift();
//删除元素的新方式缺点,向前删除,
//一次只会删除一个,也有返回值,
//返回的就是被删除的元素:导致其他元素的下标都会发生变化

结尾进:

arr.push(新值,...);//添加元素的新方式,向后添加

结尾出:

var last=arr.pop()
//删除元素的新方式缺点,向后删除,
//一次只会删除一个,也有返回值,返回的就是被删除的元素
2.队列

其实就是数组,只不过一端进,从另一端出

开头进:arr.unshift(新值,...);
结尾出:var last=arr.pop();
结尾进:arr.push(新值,...);
开头出:var first=arr.shift();
三、ES5提供了3组6个新的API
1.判断:2个

判断的结果肯定都是一个布尔值
every:
每一个,要求所有的元素都满足条件才为true,只要有一个不满足则为false,非常类似于&&

var bool=arr.every(function(val,i,arr){
//val - 当前的值
//i - 当前的值的下标
//arr - 当前数组本身
return 判断条件;
})

some:
有一些,要求只要有一个元素满足结果就为true,全部条件不满足结果才为false,非常类似于||

var bool=arr.some(function(val,i,arr){
	return 判断条件;
	})
2.遍历

拿到数组中的每个元素做相同 或 相似的操作

forEach - 直接修改原数组
arr.forEach(function(val,i,arr){
	操作;//arr[i]*=2
})
map - 不会修改原数组,返回一个新数组
var newArr=arr.map(function(val,i,arr){
	return 操作;//val*2
	})
3.过滤和汇总

过滤:
筛选出需要的部分,原数组是不会发生变化。

var subArr=arr.filter(function(val,i,arr){
   return 判断条件;//val%2==0筛选偶数元素
        })

汇总:

var result=arr.reduce(function(prev,val,i,arr){
	return prev+val;
	})

ES6:箭头函数,专门简化一切的匿名回调函数
公式:function去掉,()和{}之间添加=>,如果形参只有一个,那么()省略,如果函数体只有一句话,那么{}省略,如果函数体只有一句话并且是return,那么{}和return都省略

四、二维数组

数组的元素,又引用着另一个数组

创建:
var h52302=[["张三",18,3500],
            ["李四",19,4500],
	    ["王五",20,2500]
		];
访问:数组名[行下标][列下标];

列下标越界:返回undefined
行下表越界:得到的是一个报错,因为行下标越界已经得到undefined了,undefined没有资格再加[]做操作

遍历二维数组:必然两层循环,外层循环控制行,内层循环控制列
for(var r=0;r<arr.length;r++){
     for(var c=0;c<arr[r].length;c++){
	console.log(arr[r][c])
		}
	}
五、、*****String的概念:

什么是字符串:多个字符组成的【只读】字符【数组】

和数组有相同点:
1、字符串中的个数:str.length
2、获取字符串中的某个字符:str[i]
3、遍历字符串


***引用/对象类型:11个
*String Number Boolean -> 包装类型

*Array *Function Date(日期) Math(数学) *RegExp(正则:验证)
Error(错误)
Object(面向对象) Global(全局对象)
- 只不过在浏览器端被window对象给代替了,自然保存着全局变量和全局函数,只不过window可以省略不写,而在node.js中全局对象就叫做global

***包装类型:专门用于将原始类型的值封装为一个引用类型的对象的 为什么:原始类型的值原本是没有任何属性和方法,意味着原始类型本身是不支持.去做任何操作的