zoukankan      html  css  js  c++  java
  • JS数组(Array)操作汇总

    1、去掉重复的数组元素。
    2、获取一个数组中的重复项。
    3、求一个字符串的字节长度,一个英文字符占用一个字节,一个中文字符占用两个字节。
    4、判断一个字符串中出现次数最多的字符,统计这个次数。
    5、数组排序。

    6、快排。

    7、删除/添加数组项。

    8、数组随机顺序输出。

    9、数组求和、最大值。

    10、判断是否为数组。

    11、有一个int型数组,里面有若干数字。要求统计出一共有多少种不同的数字?每种数字出现的频率从少到多排列,频率相同则从小到大排列。

    12、冒泡排序。

     

    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 = Number.MIN_VALUE; i < this.length; i++)parseInt(this[i]) > maxValue && (maxValue = 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==='object' &&
     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、有一个int型数组,里面有若干数字。要求统计出一共有多少种不同的数字?每种数字出现的频率从少到多排列,频率相同则从小到大排列

     1 var arr = [31,31,32,13,42,5,42,8,9,6,7,7,3,4,51,8,9,0,2,4,6];
     2 newArr(arr);
     3 function newArr(arr){
     4    arr.sort(function(a,b){return (a-b)});
     5 
     6    var len=arr.length;
     7    var newarr=new Array();
     8    var n=1;
     9 
    10    for(var i=0;i<len;i++){
    11     if(arr[i]==arr[i+1]){
    12         n++;
    13     }else{
    14         var newelement=arr[i]+"+"+n;
    15         newarr.push(newelement);
    16         n=1;
    17     }
    18     }
    19     console.log(newarr);
    20 
    21    var compare=function(x,y){
    22     var lab1=x.indexOf("+");
    23     var xvalue=parseInt(x.substring(0,lab1));
    24     var xlen=parseInt(x.substring(lab1+1));
    25     var lab2=y.indexOf("+");
    26     var yvalue=parseInt(y.substring(0,lab2));
    27     var ylen=parseInt(y.substring(lab2+1));
    28     if( (xlen>ylen) || (xlen == ylen && xvalue>yvalue)) return 1;
    29     if( (xlen<ylen) || (xlen == ylen && xvalue<yvalue )) return -1;    
    30 }
    31    newarr.sort(compare);
    32    var ints=Array();
    33    for(var j in newarr){
    34     var lab3=newarr[j].indexOf("+");
    35     var intvalue=newarr[j].substring(0,lab3);
    36     ints.push(intvalue);
    37    }
    38    var types=newarr.length;/* types就是不同数字的个数 */
    39    console.log(types);
    40    console.log(ints);/* ints就是最后结果 */
    41 }

    12、冒泡排序。

     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 };
  • 相关阅读:
    将execel表格的数据导入到mysql数据库
    清明听雨
    h5调用底层接口的一些知识
    微信小程序从零开始开发步骤(一)搭建开发环境
    Matplotlib
    Numpy
    pandas
    6 MapReduce的理解
    静态链表
    单链表
  • 原文地址:https://www.cnblogs.com/missuu/p/3769855.html
Copyright © 2011-2022 走看看