网站地图    收藏   

主页 > 前端 > javascript >

javascript中数组去重/排序/搜索索引

来源:自学PHP网    时间:2014-09-19 14:47 作者: 阅读:

[导读] 本文章总结了四种数组去重算法,同时还介绍了js中数组搜索与数组排序的方法总结,有需要的朋友可参考参考。...

我总共想出了四种算法来实现这个目的:

1.

 代码如下 复制代码
Array.prototype.unique1 = function()
{
 var n = []; //一个新的临时数组
 for(var i = 0; i < this.length; i++) //遍历当前数组
 {
  //如果当前数组的第i已经保存进了临时数组,那么跳过,
  //否则把当前项push到临时数组里面
  if (n.indexOf(this[i]) == -1) n.push(this[i]);
 }
 return n;
}

2.

 代码如下 复制代码
Array.prototype.unique2 = function()
{
 var n = {},r=[]; //n为hash表,r为临时数组
 for(var i = 0; i < this.length; i++) //遍历当前数组
 {
  if (!n[this[i]]) //如果hash表中没有当前项
  {
   n[this[i]] = true; //存入hash表
   r.push(this[i]); //把当前数组的当前项push到临时数组里面
  }
 }
 return r;
}

3.

 代码如下 复制代码
Array.prototype.unique3 = function()
{
 var n = [this[0]]; //结果数组
 for(var i = 1; i < this.length; i++) //从第二项开始遍历
 {
  //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
  //那么表示第i项是重复的,忽略掉。否则存入结果数组
  if (this.indexOf(this[i]) == i) n.push(this[i]);
 }
 return n;
}

4//数组去重

 代码如下 复制代码
Array.prototype.distinct = function(){
         var filtered= [];
             var _a = {};
              for(var i = 0;i<this .length;i++){
                      if(!_a[this[i]]) {//如果已经有了就不再添加
                          _a[this[i]] = 1;
                          filtered.push(this[i])
                      }
              }
           return filtered;
};

//二分法 寻找索引

 代码如下 复制代码

function search (arr,item,lower,upper){
 lower = lower || 0;
 upper = upper || arr.length-1;
 if(lower == upper){
  if(item == arr[upper]){
      return upper;
        }else{
            return -1;
        }
 }else{
  var middle = parseInt((lower+upper)/2);
  if(item > a[middle]){
      return search (arr,item,middle+1,upper);
  }else{
     return search (arr,item,lower,middle);
        }
 }

}

var a = [10,15,3,4,5,6,7,8,9,3,8,9];
a = a.distinct(); //[10, 15, 3, 4, 5, 6, 7, 8, 9]
a.sort(function(a,b){ return a-b;}); //排序 [3, 4, 5, 6, 7, 8, 9, 10, 15]
alert(search(a,9)); //6

数组排序

 代码如下 复制代码

var arrDemo = new Array();

 arrDemo[0] = 10;
 arrDemo[1] = 50;
 arrDemo[2] = 51;
 arrDemo[3] = 100;

 arrDemo.sort(); //调用sort方法后,数组本身会被改变,即影响原数组

 alert(arrDemo);//10,100,50,51 默认情况下sort方法是按ascii字母顺序排序的,而非我们认为是按数字大小排序

 arrDemo.sort(function(a,b){return a>b?1:-1});//从小到大排序

 alert(arrDemo);//10,50,51,100

 arrDemo.sort(function(a,b){return a<b?1:-1});//从大到小排序

 alert(arrDemo);//100,51,50,10

1.数组调用sort方法后,会影响本身(而非生成新数组)

2.sort()方法默认是按字符来排序的,所以在对数字型数组排序时,不可想当然的以为会按数字大小排序!

3.要改变默认的sort行为(即按字符排序),可以自行指定排序规则函数(如本例所示)

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论