Javascript数组算法

在我们的工作中对于数组的运用还是比较多的,为了方便日常的使用,今天总结一下。主要包含以下四种:数组去重、数组顺序打乱、数组判断、数组排序

为了方便大家理解,在每个方法前添加相关概念详解,对概念熟知的略过。

一.数组去重

1.indexOf方法

概念:indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。第一位出现返回0,若没有出现则返回-1。
strObj.indexOf(subString[, startIndex])

  • 参数 strObj 必选项。String 对象或文字。
  • subString 必选项。要在 String 对象中查找的子字符串。
  • tarIndex 可选项。该整数值指出在 String 对象内开始查找的索引。如果省略,则从字符串的开始处查找。
function unique (arr) {
  var result = []; 
  for (var i = 0; i < arr.length; i++){
if (result.indexOf(arr[i]) == -1) result.push(arr[i]);
  }
  return result;
}
2.相邻比较法

解叙:相邻元素比较若相同加入新数组,返回新数组。

 function unique (arr) {
arr.sort();
var result=[arr[0]];
for(var i = 1; i < arr.length; i++){
    if( arr[i] !== arr[i-1]) {
        result.push(arr[i]);
    }
}
return result;
}
3.shift方法

概念:shift()方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
ps:要删除并返回数组的最后一个元素,请使用 pop() 方法。

function unique(arr,newArr) {
 var num;
 if (-1 == arr.indexOf(num = arr.shift()))     newArr.push(num);
 arr.length && unique(arr,newArr)
 if(arr.length==0){
   return newArr;
 };
}

二、数组顺序打乱

1.splice方法

概念:Math.random()随机返回一个大于或等于 0 但小于 1 的符号为正的数字值。
splice():可以用于插入、删除或替换数组的元素;

  • 删除-用于删除元素,两个参数,第一个参数(要删除第一项的位置),第二个参数(要删除的项数)

  • 插入-向数组指定位置插入任意项元素。三个参数,第一个参数(起始位置),第二个参数(0),第三个参数(插入的项)

  • 替换-向数组指定位置插入任意项元素,同时删除任意数量的项,三个参数。第一个参数(起始位置),第二个参数(删除的项数),第三个参数(插入任意数量的项)

     function shuffle(array) {  
      var result = [],
        n = array.length,
        i;
  while (n) {
       i = Math.floor(Math.random() * n--);
    result.push(array.splice(i, 1)[0]);
    }
    return result;
}
2.首位交换原则
function shuffle(array) {   
  var m = array.length,
      temp, i;    
while (m) {   
    i = Math.floor(Math.random() * m--);   
    temp = array[m];  
    array[m] = array[i];   
    array[i] = temp;  
}  
return array; 
}

三、判断数组

instanceof运算符

instanceof 运算符要求其左边的运算数是一个对象,右边的运算数是对象类的名字或构造函数。

var arrNew = [];  
arrNew instanceof Array;

四、数组排序

sort()运算符排序法

sort()方法使数组中的元素按照一定的顺序排列。

升序: 
function sortNum(a,b) {
 return a-b;
}
var myarr = new Array("80","16","50","6","100","1");
myarr.sort(sortNum)

降序:b-a即可

      function sortNum(a,b) {
     return b-a;
    }
    var myarr = new Array("80","16","50","6","100","1");
    myarr.sort(sortNum)