首页 > 代码库 > JS数组(Array)操作汇总
JS数组(Array)操作汇总
1、去掉重复的数组元素。
2、获取一个数组中的重复项。
3、求一个字符串的字节长度,一个英文字符占用一个字节,一个中文字符占用两个字节。
4、判断一个字符串中出现次数最多的字符,统计这个次数。
5、数组排序。
6、快排。
7、删除/添加数组项。
8、数组随机顺序输出。
9、数组求和、最大值。
10、判断是否为数组。
11、冒泡排序。
1、去掉重复的数组元素。
Array.prototype.unique = function() { var ret = []; var o = {}; for(var i=0, len=this.length; i<len; ++i){ if(!o[this[i]]){ ret.push(this[i]); o[this[i]] = this[i]; } } return ret; } var arr = [1,2,3,1,1,3,3,4,5,6,5,5,5,5,7,8,9,10,9,9,9]; var unique = arr.unique(); console.log(unique); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2、获取一个数组中的重复项。
1 var arr = [1,2,3,1,1,3,3,4,5,6,5,5,5,5,7,8,9,10,9,9,9]; 2 Array.prototype.delete = function() { 3 var arr = this; 4 var obj = {}; 5 var delArr = []; 6 for (var i = 0, l=arr.length; i < l;) 7 { 8 var key = arr[i]; 9 if (typeof obj[key] == ‘undefined‘) 10 { 11 obj[key] = "1"; 12 i++; 13 continue; 14 } 15 delArr.push(arr.splice(i, 1)[0]); 16 var l = arr.length; 17 } 18 return delArr; 19 } 20 var delArr = arr.delete();//[1, 1, 3, 3, 5, 5, 5, 5, 9, 9, 9]
3、求一个字符串的字节长度,一个英文字符占用一个字节,一个中文字符占用两个字节。
1 (function getByte(str) { 2 var num = 0; 3 for (var i = 0, l = str.length; i < l; i++) { 4 if (str.charCodeAt(i) > 255) { 5 num += 2; 6 } else { 7 num++; 8 } 9 } 10 alert(num); 11 })("你好,John!");
4、判断一个字符串中出现次数最多的字符,统计这个次数。
1 //将字符串的字符保存在一个hash table中,key是字符,value是这个字符出现的次数 2 var str = "abcdefgaddda"; 3 var obj = {}; 4 for (var i = 0, l = str.length; i < l; i++) { 5 var key = str[i]; 6 if (typeof obj[key] == ‘undefined‘) { 7 obj[key] = 1; 8 } else { 9 obj[key]++; 10 } 11 } 12 /*遍历这个hash table,获取value最大的key和value*/ 13 var max = -1; 14 var max_key = ""; 15 var key; 16 for (key in obj) { 17 if (max < obj[key]) { 18 max = obj[key]; 19 max_key = key; 20 } 21 } 22 alert("max:"+max+" max_key:"+max_key);
5、数组排序。
1 function sortNumber(a, b) 2 { 3 return a - b 4 } 5 6 var arr = new Array(6) 7 arr[0] = "10" 8 arr[1] = "5" 9 arr[2] = "40" 10 arr[3] = "25" 11 arr[4] = "1000" 12 arr[5] = "1" 13 14 document.write(arr + "<br />") 15 document.write(arr.sort(sortNumber))
6、快排。
1 //复杂度O(nlog2n) 最差O(n^2) 2 3 function quickSort(arr){ 4 5 //如果数组只有一个数,就直接返回; 6 if(arr.length<1){ 7 return arr; 8 } 9 10 //找到中间的那个数的索引值;如果是浮点数,就向下取整 11 var centerIndex = Math.floor(arr.length/2); 12 13 //根据这个中间的数的索引值,找到这个数的值; 14 var centerNum = arr.splice(centerIndex,1); 15 16 //存放左边的数 17 var arrLeft = []; 18 //存放右边的数 19 var arrRight = []; 20 21 for(i=0;i<arr.length;i++){ 22 if(arr[i]<centerNum){ 23 arrLeft.push(arr[i]) 24 }else if(arr[i]>centerNum){ 25 arrRight.push(arr[i]) 26 } 27 } 28 return quickSort(arrLeft).concat(centerNum,quickSort(arrRight)); 29 30 }; 31 var arrSort = [33,18,2,40,16,63,27]; 32 var arr1 = quickSort(arrSort); 33 console.log(arr1);
7、删除/添加数组项。
1)删除第一项, shift()方法,返回该项
2)添加第一项, unshift()方法,返回该项
3)删除最后一项, pop()方法,返回该项
4)添加最后一项, push()方法,返回该项
5)slice(a,b),a、b是返回项的起止项,不影响原数组
6)splice():两个参数时,表示删除,参数意思为删除的第一项位置和要删除的个数,返回删除项;
三个参数,中间参数(删除项数)为0时,表示插入,第一个参数时插入位置,第三个是插入项数,返回空数组;
三个参数,起始位置、要删除的项数、要插入的项,表示替换,返回删除项
均影响原数组
8、数组随机顺序输出。
1 function fnLuanXu(num) { 2 var aLuanXu=[]; 3 for (var i = 0; i < num; i++) { 4 aLuanXu[i] = i; 5 } 6 aLuanXu.sort(function(){return Math.random()>0.5?-1:1;}) 7 return aLuanXu; 8 }
9、数组求和、最大值。
1 //求和 2 Array.prototype.sum = function () 3 { 4 for (var sum = i = 0; i < this.length; i++)sum += parseInt(this[i]); 5 return sum 6 }; 7 //求最大值 8 Array.prototype.maxima = function () 9 { 10 for (var i = 0, maxValue = http://www.mamicode.com/Number.MIN_VALUE; i < this.length; i++)parseInt(this[i]) > maxValue && (maxValue = http://www.mamicode.com/this[i]); 11 return maxValue 12 }; 13 //应用 14 var arr = [1,21,3,4,22,45,6,7,32]; 15 alert(arr.join("+") + "=" + arr.sum()); //和:141 16 alert(arr.join("|") + "中, 最大的数是:" + arr.maxima()); //最大数:45
10、判断是否为数组。
1 //《javascript语言精粹》中答案 2 var is_array=function(value) { 3 return value && typeof value=http://www.mamicode.com/==‘object‘ &&"color: rgb(0, 128, 128);"> 4 value.constructor===Array && 5 typeof value.length===‘number‘ && 6 typeof value.splice===‘function‘ && 7 !(value.propertyIsEnumerable(‘length‘)); 8 } 9 10 //方法1 11 arr instanceof Array 12 //方法2 13 function isArray(o) { return Object.prototype.toString.call(o) === ‘[object Array]‘; } 14 //方法3 15 arr.constructor === Array && typeof arr === "object" 16 17 //通用判断类型函数 18 function is(type, obj) { 19 var clas = Object.prototype.toString.call(obj).slice(8, -1); 20 return obj !== undefined && obj !== null && clas === type; 21 }
1 JavaScript 类型表格 2 3 Value Class Type 4 ------------------------------------- 5 "foo" String string 6 new String("foo") String object 7 1.2 Number number 8 new Number(1.2) Number object 9 true Boolean boolean 10 new Boolean(true) Boolean object 11 new Date() Date object 12 new Error() Error object 13 [1,2,3] Array object 14 new Array(1, 2, 3) Array object 15 new Function("") Function function 16 /abc/g RegExp object (function in Nitro/V8) 17 new RegExp("meow") RegExp object (function in Nitro/V8) 18 {} Object object 19 new Object() Object object
上面表格中,Type 一列表示 typeof
操作符的运算结果。可以看到,这个值在大多数情况下都返回 "object"。
Class 一列表示对象的内部属性 [[Class]]
的值。
JavaScript 标准文档中定义:[[Class]]
的值只可能是下面字符串中的一个:Arguments
, Array
,Boolean
, Date
, Error
,Function
,JSON
, Math
,Number
, Object
, RegExp
,String
.
11、冒泡排序。
1 var bubbleSort = function(array){ 2 var i = 0, len = array.length, j, d; 3 for(; i<len-1; i++){ 4 for(j=0; j<len-i-1; j++){ 5 if(array[i] < array[j]){ 6 d = array[j]; 7 array[j] = array[i]; 8 array[i] = d; 9 } 10 } 11 } 12 return array; 13 };