JAVASCRIPT
VUE
REACT
NODE
ES6
TYPESCRIPT

Js算法排序乱序去重

2018. 02. 01    

算法

排序算法

//方法一
function sort(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        let temp = arr[j]
        arr[j] = arr[j + 1]
        arr[j + 1] = temp
      }
   }
 }
 return arr
}


//方法二
arr.sort((a,b)=>a-b)
// 对象数组
arr.sort((a,b)=>a.age-b.age)


//快速排序
var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
};

快速排序-软老师

“快速排序”的思想很简单,整个排序过程只需要三步:

(1)在数据集之中,选择一个元素作为”基准”(pivot)。 (2)所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。 (3)对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

去重

//方法一
function noRepeat(arr){
  let newArr = [];
  for(let i = 0;i < arr.length;i++){
    if(newArr.indexOf(arr[i]) === -1){
    	newArr.push(arr[i])
    }
  }
  return newArr
}

//方法二 利用ES6 Set() 去重

function noRepeat(arr){
  return [...new Set(arr)]}
}

//方法三  利用对象去重
const unique = arr => {
	var obj = {}
	arr.forEach(value => {
		obj[value] = 0;//这步新添加一个属性,并赋值,如果不赋值的话,属性会添加不上去
	})
	return Object.keys(obj);//`Object.keys(对象)`返回这个对象可枚举属性组成的数组,这个数组就是去重后的数组
}
console.log(unique(arr));//["1", "2", "3", "NaN", "undefined", "null", "a", "b"]

乱序

function shuffle(arr) {
  let result = [],random;
  while (arr.length > 0) {
    random = Math.floor(Math.random() * arr.length);
    result.push(arr[random])
    arr.splice(random, 1)
  }
  return result;
}

求100内的质数

function prime(){
  let arr = []
  for(let i = 2;i < 100;i++){
    let flag = true;
    for(let j = 2;j < Math.sqrt(i);j++){
      if(i % j == 0){
        flag = false;
        break
      }
    }
    if(flag){
      arr.push(i)
    }
  }
  return arr
}

以上