首页 > 代码库 > 高程三:Array
高程三:Array
一:Array数组
1、Array.isArray(参数) 检测是否是数组,*不兼容IE8,兼容IE9及以上、Chrome、Firefox等,要兼容IE8,可以用
Object.prototype.toString.call([1,2]) == "[object Array]"
2、实例方法:
1).push(xx,xx,xx,...) //插入一项或多项到数组的末尾,并修改length
跟 arr[arr.length] = xxx; 插入类似
var arr = [1,2]; arr.push(3,4); console.log(arr); // [1,2,3,4] arr[arr.length] = 5; console.log(arr[arr); //[1,2,3,4,5]
2).pop() //从数组末尾移除最后一项,并修改length
3).shift() //从数组头部移除第一项
4).unshift(xx,xx,xx,...) //从数组头部插入一项或多项
5).reverse() //反转数组
var arr = [1,2,3,4,5]; arr.reverse(); console.log(arr); //[5,4,3,2,1]
6).sort() //排序
1、sort排序时,是把数组每一项toString()转成字符串,然后比较编码,所以:
var arr = [0, 1, 5, 10, 15] ; arr.sort(); console.log(arr); //[0, 1, 10, 15, 5]
2、如果要按数字大小排序,如果做?
var arr = [0, 1, 5, 10, 15] ; function compare(value1, value2){ if(value1 < value2){ return -1; }else if(value1 > value2){ return 1; }else{ return 0; } } arr.sort(compare); console.log(arr); //[ 0, 1, 5, 10, 15 ]
实际上,可以简写成:
var arr = [0, 1, 5, 10, 15] ; // value1 - value2 是升序 // value2 - value1 是降序 function compare(value1, value2){ return value1 - value2; } arr.sort(compare); console.log(arr); //[ 0, 1, 5, 10, 15 ]
3、随机打乱数组:
var arr = [0, 1, 5, 10, 15] ; // Math.random()每次返回的值不一样 function compare(value1, value2){ return Math.random() - 0.5; } arr.sort(compare); console.log(arr);
4、根据对象里的某一项,去排序
var arr = [{ "a": 5, "b": "a1" }, { "a": 10, "b": "a2" }, { "a": 1, "b": "a3" }]; arr = compare({ arr: arr, prop: ‘a‘, type: ‘down‘ }); console.log(arr); function compare(options) { if(typeof options.arr == "array" && options.arr.length == 0){ return []; } options.type = options.type || "up"; var _prop = options.prop; options.arr.sort(function(value1, value2){ if(options.type == "up"){ return value1[_prop] > value2[_prop]; }else if(options.type == "down"){ return value2[_prop] > value1[_prop]; } }); return options.arr; }
7).concat(参数) [返回新数组]
var arr = [1,2]; var arr2 = arr.concat(); //复制功能 console.log(arr2); var arr3 = arr.concat(arr); //合并数组功能 console.log(arr3); var arr4 = arr.concat(11,[22,33]); //插入项和合并数组功能 console.log(arr4);
8).slice( 起始位置, 结束位置*不包括 )[返回新数组]
截取一个新数组,参数说明:起始和结束位置,从0开始计算;结束位置如果没有,就会截取到最后一个数组项
9).splice() 数组中最为强大的方法
//1: 删除任意数量的项,splice(从第几项开始, 删除几项) var arr = [1,2,3,4,5]; arr.splice(1, 2); console.log(arr); //[ 1, 4, 5 ] //2: 向指定位置插入任意数量的项,splice(从第几项开始, 0, 插入项1, 插入项2, ... ) var arr = [1,2,3,4,5]; arr.splice(2, 0, ‘a‘, ‘b‘) console.log(arr); //[ 1, 2, ‘a‘, ‘b‘, 3, 4, 5 ] //3: 向指定位置插入任意数量的项,splice(从第几项开始, 删除几项, 插入项1, 插入项2, ... ) var arr = [1,2,3,4,5]; arr.splice(2, 1, ‘a‘, ‘b‘) console.log(arr); //[ 1, 2, ‘a‘, ‘b‘, 4, 5 ]
注意:splice()方法始终会返回一个新数组,包含从原始数组中删除的项。
8).indexOf(要查找的项,查找起点位置) 从前向后找; lastIndexOf(要查找的项,查找起点位置) 从后向前找;*不兼容IE8
var arr = [1,2,3,1,2,33,1,44]; var idx = arr.indexOf(1,1); console.log(idx); //3 var aIdx = []; var idx = 0; while((idx = arr.indexOf(1, idx)) != -1){ aIdx.push(idx); idx += 1; } console.log(aIdx); // [0, 3, 6]
9)ES5中的迭代方法,共5个: *IE8及以下不兼容
every(): 循环给定数组的每一项,如果所有项都满足函数内条件,则返回 true,否则返回 false。不影响原数组。
most(): 循环给定数组的每一项,如果至少有一项满足函数内条件,则返回 true,否则返回 false。不影响原数组。
filter(): 循环给定数组的每一项,返回所有满足函数内条件的数组项,组成一个新数组返回。不影响原数组。
map(): 循环给定数组的每一项,运行给定的函数,返回每次函数调用的结果组成新的数组并返回。不影响原数组。
forEach(): 循环给定数组的每一项,运行给定的函数对原数组项作处理。该方法没有返回值,并影响原数组。
var nums = [1,2,344,55,6,6,32]; var every = nums.every(function(item, index, array){ return item > 2; }); console.log(‘every:‘, every); //every: false var some = nums.some(function(item, index, array){ return item > 300; }); console.log(‘some:‘, some); //some: true var filter = nums.filter(function(item, index, array){ return item%2==0; }); console.log(‘filter:‘, filter); //filter: [ 2, 344, 6, 6, 32 ] var map = nums.map(function(item, index, array){ return item*2; }); console.log(‘map:‘, map); //map: [ 2, 4, 688, 110, 12, 12, 64 ] var forEach = nums.forEach(function(item, index, array){ if(item < 10){ array[index] = 10; } }); console.log(‘forEach:‘, nums); //forEach: [ 10, 10, 344, 55, 10, 10, 32 ]
高程三:Array