一、ES5新增的数组方法:
1、map();
语法:arr.map(function( item,i){
return item*3;
})
含义:遍历数组,item代表是每一个元素,i代表下标
返回值:映射出来的新数组
2、forEach();
语法:arr.forEach(function(item,i){
没有return。
})
含义:遍历数组
返回值:无
3、filter();
语法:arr.filter(function(item,i){
return item > 8; //return 条件
})
含义:过滤满足条件的元素
返回值:以数组形式返回满足条件的元素
4、some();
语法:arr.some(function(item,i){
return item > 8; //return 条件
})
含义:只要有一个元素满足条件,返回值便为true,所有元素都不满足条件,返回值即为false
返回值:true/false
5、every();
语法:arr.every(function(item,i){
return item; //return 条件
})
含义:数组中需要所有的元素都满足条件,返回值才能为true,有一个不满足条件,返回值便为false
返回值:true/false
二、数组的排序
冒泡排序:排序思路:相邻两个元素进行比较,大的往后排。
举例:var arr = [12,8,5,1];
// 第一轮:
arr.length - 1:元素是4个,但是比较3次,这个-1的目的是,4个元素,第一轮排够3次就够了
for ( var i = 0; i < arr.length - 1; i++ ){
if ( arr[ i ] > arr[ i + 1 ] ){
var temp = arr [ i ];
arr [ i ] = arr [ i + 1 ];
arr [ i + 1 ] = temp
}
console.log(arr);
}
arr[0]和arr[1] [8,12,5,1]
arr[1]和arr[2] [8,5,12,1]
arr[2]和arr[3] [8,5,1,12]
// 比完一轮,最大的跑最后了
// 第二轮:
arr.length - 1 - 1:元素是4个,但是比较2次(因为第一轮已经确定最后一个元素是最大的并且已经排在了最后一位,不用动了)
for ( var i = 0; i < arr.length - 1 - 1; i++ ){
if ( arr[ i ] > arr[ i + 1 ] ){
var temp = arr [ i ];
arr [ i ] = arr [ i + 1 ];
arr [ i + 1 ] = temp
}
console.log(arr);
}
arr[0] 和arr[1] [5,8,1,12]
arr[1]和arr[2] [5,1,8,12]
// 第二轮,最大的两个跑后面了
// 第三轮
arr.length - 1 - 1:元素是4个,但是比较1次(因为第一轮、第二轮已经确定最后一个元素是最大的并且已经排在了最后一位,倒数第二个元素次之并且已排好位置,不用动了)
for ( var i = 0; i < arr.length - 1 - 1 - 1; i++ ){
if ( arr[ i ] > arr[ i + 1 ] ){
var temp = arr [ i ];
arr [ i ] = arr [ i + 1 ];
arr [ i + 1 ] = temp
}
console.log(arr);
}
arr[0]和arr[1] [1,5,8,12]
//第三轮结束便完成排序
综上所述:冒泡排序可优化为以下代码(简化成for循环嵌套)
选择排序: 排序思路:假设第一个元素是最小值,拿第一个元素和后面的所有元素进行对比,如果发现有比第一个元素还小的元素,就进行交换。
举例:var arr = [ 12,8,5,3];
//第一轮
for (var j = 1; j < arr.length; j++) {
if (arr[0] > arr[ j ]) {
var temp = arr[0];
arr[0] = arr[ j ];
arr[ j ] = temp;
}
console.log(arr);
}
arr[0] 和 arr[1] [8,12,5,3]
arr[0] 和 arr[2] [5,12,8,3]
arr[0] 和 arr[3] [3,12,8,5]
//经过一轮比较,最小的跑最前面
//第一轮比较完毕,第一个元素已经确定是最小的
//第二轮
for (var j = 2; j < arr.length; j++) {
if (arr[1] > arr [ j ]) {
var temp = arr[1];
arr[1] = arr[ j ];
arr[ j ] = temp;
}
console.log(arr);
}
arr[1] 和 arr[2] [3,8,12,5]
arr[1] 和 arr[3] [3,5,12,8]
//第三轮
for (var j = 3; j < arr.length; j++) {
if (arr[2] > arr[j]) {
var temp = arr[2];
arr[2] = arr[ j ];
arr[ j ] = temp;
}
console.log(arr);
}
arr[2]和arr[3] [3,5,8,12]
经过三轮比较排序,原数组已按从小到大顺序排序了
综上所述,选择排序可以优化为一下代码(简化成for循环嵌套)
三、数据类型
数据类型:基本数据类型和引用数据类型
1、基本数据类型:number,string,boolean,undefined,null
typeof 10 ===>"number" typeof null===> "object"
2、引用数据类型: obejct , array
【注】通过tyepof检测引用数据类型的结果都是object
3、基本数据类型:
3-1.基本数据类型变量存的是值
3-2. 基本数据类的变量存储在栈内存
3-3. 基本数据类型的变量和变量互不影响
4、引用数据类型:
4-1、引用数据类型的变量存储的是地址值
4-2、引用数据类型的变量存储在堆内存
4-3、引用数据类型的变量如果和另一个引用数据类型的变量共用一个地址,其中一个变化另一个也会受到影响。
案例三连: