javascript數組去重/查找/插入/刪除

數組去重

原型方法

//---------------first---------------
 Array.prototype.distinct = function(){
      var arr=[];
      var obj={}; //對象承接
      for(var i=0,len=this.length;i<len;i++){
          if(!obj[this[i]]){
              obj[this[i]]=1;
              arr.push(this[i]);
          }
      }
   return arr;
};
var arr = new Array();
arr.push(1,3,2,4,4,4,5,6,7,8,8,8,9,0);
arr.distinct();

//----------------second----------------
Array.prototype.distinct = function(){ 
    for(var i=0,len=this.length;i<len;i++){
      for(var j=i+1;j<=len;j++){
        if(this[i]==this[j]){
          console.log(this[j]);
          this.splice(j,1);
          j--; //得考慮若是刪除一個元素,j的值須要減1
          len--;
        }
      }    
    }
};
var arr = new Array();
arr.push("a","b","c","c","b","bb","dd","d","aa","c","bb");
arr.distinct();

//只適用於已經排序的數組,數組排序方法可參見另一篇博客
 Array.prototype.distinct = function(){
    var arr=[];
    for(var i=0,len=this.length;i<len;i++){
      if(this[i]==this[i+1]){
        continue;
      }else{
        arr.push(this[i]);
      }    
    }
 return arr;
};
var arr = new Array();
arr.push(1,3,2,4,4,4,5,6,7,8,8,8,9,0);
arr.distinct();

普通方法

function removeRepeat(arr){
   var array=[];
   var obj={};
   for(var i=0,len=arr.length;i<len;i++){
      if(!obj[arr[i]]){
        obj[arr[i]]=1;
        array.push(arr[i]);
      }
   }
   return array;
};
var arr = new Array(1,3,2,4,4,4,5,6,7,8,8,8,9,0);
var array = removeRepeat(arr);

數組查找

順序查找

function SequenceSearch(arr, value){
    var i;
    for(i=0; i<arr.length; i++){
         if(arr[i]==value)
         return i;
    }
    return -1;
}

二分查找

二分查找元素必須是有序的,若是是無序的則要先進行排序操做javascript

-------------折半查找--------------
function BinarySearch1(arr, value){
    var low, high, mid;
    low = 0;
    high = arr.length-1;
    while(low<=high){
        mid = Math.floor((low+high)/2);
        if(a[mid]==value){
             return mid;
        }
        if(a[mid]>value){
            high = mid-1;
        }
        if(a[mid]<value){
            low = mid+1;
        }
    }
    return -1;
}
-------------遞歸版本--------------
function BinarySearch2(arr, value){
    var low, high, mid;
    low = 0;
    high = arr.length-1;
    var mid = low+(high-low)/2;
    if(arr[mid]==value){
        return mid;
    }
    if(a[mid]>value){
        return BinarySearch2(arr, value);
    }
    if(a[mid]<value){
        return BinarySearch2(arr, value);
    }
}

數組插入

順序插入

//----------------first----------------
function Insert(arr, n, data){
    //若插入數據位置不在表尾
    if (n < arr.length){
        //將要插入位置以後元素依次向後移動一位
        for (var i = seqList.ListLen - 1; i >= n; i--) {
            seqList.ListData[i + 1] = seqList.ListData[i];
        }
    }
    //將數據插入到位置爲n的位置並將數組的長度加1
    seqList.ListData[n-1] = data;
    seqList.ListLen++;
    return true;
}

//----------------second----------------
function  aa(arr, val) {
    for (var i = 0; i <arr.length; i++) {
        if (arr[i] == val) return i;
    }
    return -1;
};
function bb(arr, val) {
    var index =arr.indexOf(val);
    if (index > -1) {
    arr.splice(index, 1);
    }
};
var emp = ['abs','dsf','sdf','fd']
bb(emp, 'fd');

數組刪除

function Delete(arr, n){
    //判斷數組是否爲空
    if (seqList.ListLen == 0) return false;
    //判斷n的位置是否合法
    if (n < 1 || n > seqList.ListLen) return false;
    //若是刪除不是最後位置
    if (n < seqList.ListLen) {
        //將刪除位置後繼元素依次前移
        for (int i = n; i < seqList.ListLen; i++) {
            seqList.ListData[i-1] = seqList.ListData[i];
        }
    }
    //表長減1
    seqList.ListLen--;
    return true;
}
相關文章
相關標籤/搜索