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