魏长东

weichangdong

js 温习1

//1、数组排序,默认升序排列,sort()方法会调用数组每一项的toString(),然后比较得到的字符串来排序  
//sort() : 返回排序之后的数组  
//var arr = [23,1,3,56,42,-1];  
//arr.sort();  
//alert(arr); // -1,1,3,23,42,56  
  
//即使数组每一项都是数值,sort()方法比较的也是字符串  
//var arr = [0,1,5,10,15];  
//arr.sort();  
//alert(arr); //0,1,10,15,5  
  
//sort()可以接收一个函数参数,用于对数组项进行比较  
/* 
function compare(a,b){ 
    if(a < b){ 
        return -1; 
    }else if(a > b){ 
        return 1; 
    }else{ 
        return 0; 
    } 
} 
var arr = [0,1,5,10,15]; 
arr.sort(compare); 
alert(arr); //0,1,5,10,15 
*/  
  
//2、反转数组:reverse(),返回排序之后的数组  
//var arr = [0,1,5,10,15];  
//arr.reverse();  
//alert(arr); //15,10,5,1,0  
  
  
//3、concat()方法: 基于当前数组中所有项创建一个新数组  
//concat()先创建当前数组的一个副本,然后将接收到的参数添加到数组的末尾,然后返回新的数组。  
//如果没有给concat()方法传参数,则仅仅是复制当前数组并返回副本。  
//如果给concat()传递的是一个或者多个数组,则会将数组每一项都添加到结果数组中,  
//如果传递参数不是数组,则会简单地添加数组末尾。  
  
//var names = ["zhangsan","lisi"];  
//var names2 = names.concat('wangwu','zhaoliu',['xiaoming','xiangsun']);  
//alert(names); //zhangsan,lisi  
//alert(names2); // zhangsan,lisi,wangwu,zhaoliu,xiaoming,xiangsun  
  
  
//4、slice() : 基于当前数组的一项或多项创建新数组,接收一个或者两个参数,项的起始位置和结束位置。  
//slice方法不影响原始数组  
//var names = ["zhangsan","lisi","wangwu","zhaoliu","sunqi"];  
//var names2 = names.slice(1);  
//var names3 = names.slice(1,4); //包含起始位置元素,不包含结束位置元素  
//alert(names); //zhangsan,lisi,wangwu,zhaoliu,sunqi  
//alert(names2); //lisi,wangwu,zhaoliu,sunqi  
//alert(names3); //lisi,wangwu,zhaoliu  
  
//如果slice参数中有负数,则用数组长度加上该数来定位  
//var names = ["zhangsan","lisi","wangwu","zhaoliu","sunqi"];  
//alert(names.slice(-2,-1)); // slice(-2,-1) = slice(3,4)  返回 ”zhaoliu“  
  
//如果结束位置小于起始位置,则返回空数组  
//alert(names.slice(4,1)); //空数组  
  
  
//5、splice()方法:向数组中插入项,splice()方法始终返回一个数组,该数组包含从原始数组中删除的项,  
//如果没有删除任何项,则返回空数组。  
//(1):  删除数组项,从哪个位置开始删除,删除几项  
//var names = ["zhangsan","lisi","wangwu","zhaoliu","sunqi"];  
//alert(names.splice(0,2)); //zhangsan,lisi  
//alert(names); //wangwu,zhaoliu,sunqi  
  
//(2):  插入数组项,向指定位置插入任意数量的项。参数: 起始位置、0(要删除的项数)、要插入的项  
//var names = ["zhangsan","lisi","wangwu","zhaoliu","sunqi"];  
//var deleted = names.splice(1,0,'aa','bb','cc');  
//alert(names); //zhangsan,aa,bb,cc,lisi,wangwu,zhaoliu,sunqi  
//alert(deleted);//返回空数组  
  
//(3):  替换,向指定位置插入任意数量的项,且同时删除任意数量项,参数: 起始位置、要删除的项数)、要插入的项  
//var names = ["zhangsan","lisi","wangwu","zhaoliu","sunqi"];  
//var deleted = names.splice(1,1,'aa','bb','cc');  
//alert(names); //zhangsan,aa,bb,cc,wangwu,zhaoliu,sunqi  
//alert(deleted);//lisi  
  
  
//6、indexOf() \ lastIndexOf()  :  返回要查找项在数组中的位置,没找到返回-1,使用全等===比较  
//支持浏览器包含IE9+、其他浏览器  
//var names = ["zhangsan","lisi","wangwu","zhaoliu","sunqi","lisi","wangwu","sunqi"];  
//alert(names.indexOf("lisi")); // 1  
//alert(names.lastIndexOf("lisi")); // 5  
  
//7、数组遍历:every(),filter(),forEach(),map(),some()  参数:每一项上运行的函数,运行该函数的作用域对象  
//支持这些遍历方法的浏览器:IE9+及其他浏览器  
//every(): 遍历数组每一项,如果每一项都返回true,则返回true  
//some(): 遍历数组每一项,如果任意一项返回true,则返回true  
//filter(): 过滤满足条件的值,返回这些值组成的新数组  
//map() : 返回一个数组,这个数组的每一项都是在原始数组的对应项上运行传入函数的结果。  
//forEach(): 没有返回值,与for循环一样  
/* 
var numbers = [1,2,3,4,5,4,3,2,1]; 
var everyResult = numbers.every(function(item,index,array){ 
    return item > 2; 
}); 
alert(everyResult);  //false 
 
var someResult = numbers.some(function(item,index,array){ 
    return item > 2; 
}); 
alert(someResult);  //true 
 
var filterResult = numbers.filter(function(item,index,array){ 
    return item > 2; 
}); 
alert(filterResult);  //3,4,5,4,3 
 
var mapResult = numbers.map(function(item,index,array){ 
    return item*2; 
}); 
 
alert(mapResult);//2,4,6,8,10,8,6,4,2 
 
numbers.forEach(function(item,index,array){ 
    //TODO 
}); 
*/  
//8、reduce()\reduceRight(): 遍历数组所有项,构建一个最终返回值  
//reduce():  从前向后遍历,reduceRight() :从后项前遍历  
//接收四个参数: 前一个值,当前值,项索引,数组对象  
//函数返回值作为第一个参数自动传递给下一项。  
  
//使用reduce()求和  
var numbers = [1,2,3,4,5,6,7,8,9,10];  
var sum = numbers.reduce(function(prev,cur,index,array){  
    return prev + cur;  
});  
alert(sum); //55