首页 > 代码库 > 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 &lt; 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]] 的值只可能是下面字符串中的一个:ArgumentsArray,BooleanDateError,Function,JSONMath,NumberObjectRegExp,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 };