一、javascript数组基础
① JS中的length方法,JS中的数组,类似于java中Map容器,长度可以改变,类型可以是任意的。
var arr = [1,2,true,new Date()]; alert(arr.length); //4 /** * JS中的数组,类似于java中Map容器,长度可以改变,类型可以是任意的。 * @type {number} */ arr.length = 10; alert(arr.length); alert(arr); //调用了toString方法
② push方法,push 方法,向数组中追加元素,返回值为当前数组元素的长度
var arr2 = []; arr2.push(1); var result = arr2.push(true,false); alert(arr2); alert(result); //3,新数组的元素个数
③ pop方法,从元素的尾部移除一个元素
var obj = arr2.pop(); alert(arr2); alert(obj); //返回值为移除的元素
④ shift()从数组的头部移除一个元素,所谓的弹栈
var arr3 = [1,2,3,4]; var result = arr3.shift(); //从头部移除一个元素 alert(arr3); alert(result); //返回值是移除的元素
⑤ unshift(parm),从数组的头部加入元素,所谓的压栈
var result2 = arr3.unshift(true,false); alert(result2); //从数组的头部增元素 alert(arr3); //返回新数组的长度
⑥ JS的splice方法,操作原数组,按照指定的方式分割
var arr4 = [1,2,3,4,5]; /** * 第一个参数表示起始位置 * 第二个参数表示要截取的个数 * 第三个参数以及之后的参数表示追加的元素,从截取掉的位置开始追加 * @type {Array.<number>} */ var splice_resulet = arr4.splice(1,2,0,4,5);//参数很灵活 alert(arr4); //1,3,4,5,4,5 alert(splice_resulet); //2,3
下面一一举例:
//①一个参数的情况 var arr = [1,2,3,4,5,6]; var result1 = arr.splice(2); //表示从第二个位置开始切割,也就是3的位置 alert(arr); //1,2 alert(result1); //3,4,5,6 //②两个参数的情况 var arr2 = [1,2,3,4,5,6]; var result2 = arr2.splice(3,5); //全闭区间 alert(arr2); //1,2,3 alert(result2); //4,5,6 //③多个参数的情况 var arr3 = [1,2,3,4,5,6]; var result3 = arr3.splice(2,3,new Date(),'hello'); //用从第三个参数之后的所有数据填充被截取后的位置 alert(arr3); //1,2,Tue Sep 12 2017 20:46:17 GMT+0800 (中国标准时间),hello,6 alert(result3); //3,4,5
⑦ slice方法,左闭右开,原来的数组并不会变,也就是不操作数组本身,splice要操作数组本身
var arr5 = [1,2,3,4,5]; var slice_result = arr5.slice(2,4); //左闭右开,原来的数组并不会变,也就是不操作数组本身,splice要操作数组本身 alert(arr5); alert(slice_result); //返回截取的内容
⑧ concat方法,将两个数组合并为一个数组
var arr6 = [1,2,3,4,5,6]; var arr7 = [1,2,3]; alert(arr6.concat(arr7)); //将两个数组合并成一个新的数组,不操作数组本身 alert(arr6); alert(arr7);
⑨ join方法,在数值之间加入指定的字符
var arr6 = [1,2,3] var resutl_join = arr6.join("|"); alert(resutl_join); //在元素之间添加内容,也不操作数组本身 alert(arr6); // 1|2|3
⑩ compare方法,对数组排序
var arr8 = [10,3,2,5,9,0]; var a1 = arr8.sort(); alert(a1); alert(arr8);//数组排序,要操作数组,返回排序后的数组 0,10,2,3,5,9 //特别注意,排序的时候是一位一位的比较,大的就大,比如:2和10比较,由于2比1大,所以排序的结果是10,2 //那么该怎么去比较排序呢?
如果要按照自己的方式比较,那么需要自己定义一个排序的规则:
var arr = [3,2,10,30,9]; function mysort(value1,value2){ if(value1 > value2){ return 1; }else if(value1 < value2){ return -1; }else { return 0; } } alert(arr.sort(mysort)); //2,3,9,10,30
11 reverse,将数组倒叙
var arr10 = [1,2,90]; alert(arr10.reverse()); //90,2,1
二、ECMA5数组新特性
① indexof方法,返回数据的索引位置
var arr = [1,2,3,4,5]; //① indexof方法,返回数据的索引位置 alert(arr.indexOf(3)); // 4
② lastIndexOf方法,从倒数位置开始,返回数据所在的索引位置
② lastIndexOf方法,从倒数位置开始,返回数据所在的索引位置 alert(arr.lastIndexOf(5)); //4
③ every ,对数中的每个数据进行指定的判断,全部为true则返回true
var result = arr.every(function (item,index,arr) { return item > 3; }); alert(result); //false,因为不是所有的数据都大于3
④ some,与every相反,every相当于是&& some是取||
var result = arr.some(function(item,index,arr) { return item > 3; }); alert(result); //true ,因为有数字大于3
⑤ filter,可以按照自己指定的过滤
var result = arr.filter(function(item,index,arr) { return item > 3; }); alert(result);
⑥ forEach,就是一个简单的遍历
var result = arr.forEach(function(item,index,arr) { alert(item); });
⑦ map,方法,可以按照指定的方式对每一个数据进行运算,然后返回新的数组
var result = arr.map(function(item,index,arr){ return item*2; }); alert(result); //2,4,6,8,10
⑧ reduce ,可以获取当前索引的前一个和当前一个
var result = arr.reduce(function (prev, cru, index, p4) { return prev + cru; }); alert(result); //15
⑨ reduceRight和reduce差不多,只不过这个是从右边开始遍历
var result = arr.reduceRight(function (prev, cru, index, p4) { console.log(prev); console.log(cru); return prev + cru; //prev只的是当前元素的后面一个 }); alert(result); //15