[聚合文章] javascript数组操作

JavaScript 2018-01-16 17 阅读
  • 去重

  • 删除指定元素

  • 取最大值

  • 去重

    - 最简单的方法:对比法

    思路:先定义一个新的空数组,然后遍历要去重的数组,判断新数组的每个元素和要去重数组中的每个元素是否相等,将不相等的值添加到新数组中.

    代码:

    console.time('arr');    var removal = function(oldArr){        var newArr = [];                            //定义一个新数组        for (var i = 0; i < oldArr.length; i++) {   //循环要去重的数组            if(!isHasThisArr(newArr,oldArr[i])){    //判断新数组的每个元素和要去重数组中的每个元素是否相等[注意:一定要使用全等号,否则数组元素会进行隐式转换,导致字符串和数字一样的情况下被去重掉]                newArr.push(oldArr[i]);             //将不相等的值添加到新数组中            }        }        return newArr;    }    var isHasThisArr  = function(newArr,oldArr){        for (var i = 0; i < newArr.length; i++) {            if(newArr[i]===oldArr){                return true;            }        }        return false;    }    var arrNum = [1,2,1,'2',1,3,4,3,2,1,5,6,5,4,5,6,7,8,9,0,8,6,6,5,'5',4,4,3];    var removalArr = removal(arrNum);    console.log(removalArr);    //[1, 2, "2", 3, 4, 5, 6, 7, 8, 9, 0, "5"]console.timeEnd('arr');    //耗时:4.85302734375ms                

    或者

    console.time('arr');    Array.prototype.removal = function(){        if(this.length==0){            return;        }        var newArr = [this[0]];                         //创建新数组,并将要去重数组的第一个元素作为值        for (var i = 0; i < this.length; i++) {         //循环要去重的数组            var isBoolean = false;                      //声明一个值为false的变量            for (var j = 0; j < newArr.length; j++) {   //循环新数组                if(newArr[j]===this[i]){                //判断新数组的每个元素和要去重数组中的每个元素是否相等[注意:一定要使用全等号,否则数组元素会进行隐式转换,导致字符串和数字一样的情况下被去重掉]                    isBoolean = true;                   //重置变量值为true                    break;                              //跳出新数组的循环                }            }            if(!isBoolean){                                             newArr.push(this[i]);                   //将不相等的值添加到新数组中             }        }        return newArr;    }    var arrStr = [1,'1',2,'2',1,2,1,3,4,3,2,1,5,6,5,4,5,6,7,8,9,0,8,6,6,5,5,4,4,3,'a','2','3','a'];    var removalStrArr = arrStr.removal();    console.log(removalStrArr);    //[1, "1", 2, "2", 3, 4, 5, 6, 7, 8, 9, 0, "a", "3"]console.timeEnd('arr');    //耗时0.56689453125ms

    - 存在兼容性的方法:indexOf方法

    思路:定义一个新的空数组,利用indexOf的给定元素不存在返回-1的特性进行遍历去重

    注意:indexOf 不兼容IE8及以下

    代码:

    console.time('indexOf');    //利用数组的indexOf方法    Array.prototype.removalArray = function(){        var newArr = [];        for (var i = 0; i < this.length; i++) {            if(newArr.indexOf(this[i]) == -1){  //indexOf 不兼容IE8及以下                 newArr.push(this[i]);            }        }        return newArr;    }    var a = [1,2,1,2,3,'3',4,5,6,6,6];    var b = a.removalArray();    console.log(b);    //[1, 2, 3, "3", 4, 5, 6]console.timeEnd('indexOf');    //耗时:0.43310546875ms

    - 空间换时间法:hash法

    思路:创建新数组和新对象,判断以数组索引为属性的属性是否存在,如果不存在将该属性赋值为true,然后把该元素之添加到新数组中

    注意:利用hash表,可能会出现字符串和数字一样时出错的问题(不区分数据类型),如var a = [1, 2, 3, 4, '3', 5],会返回[1, 2, 3, 4, 5]

    代码:

    console.time('removalObj');    //利用hash表,可能会出现字符串和数字一样的话出错,如var a = [1, 2, 3, 4, '3', 5],会返回[1, 2, 3, 4, 5]    Array.prototype.removalObj = function(){        var newArr = [];        var ObjArr = {};        for (var i = 0; i < this.length; i++) {            if(!ObjArr[this[i]]){                ObjArr[this[i]] = true;                newArr.push(this[i]);            }        }        return newArr;    }    var objArray = [1,2,1,2,3,'3',4,5,6,6,6];    var removalObjArray = objArray.removalObj();    console.log(removalObjArray);    //[1, 2, 3, 4, 5, 6]console.timeEnd('removalObj');    //耗时:0.873046875ms

    删除指定元素

    思路:利用数组splice方法的特性,获取传入值的元素下标,然后从该下标开始删除,到该下标之后的第一个元素结束删除

    //删除指定元素Array.prototype.remove = function(val){    for (var i = 0; i < this.length; i++) {        if(this[i] === val){            this.splice(i,1);            break;        }    }    return this;}var re = [1,2,3,4,5,'3','6'];var res = re.remove('3');console.log(res);    //[1, 2, 3, 4, 5, "6"]

    取最大值

    思路:先声明一个变量,值为数组的第一个元素,然后拿声明好的变量和数组中的元素循环对比,发现数组中的元素比变量的值大就把该值赋给变量

    代码:

    //取最大值Array.prototype.max = function(){    var max = this[0];    for (var i = 0; i < this.length; i++) {        if(this[i] > max){            max = this[i];        }    }    return max;}var arrMax = [1,2,2,3,,6,7,89,9,5,5,3,21];console.log(arrMax.max());    //89

    注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。