1、选择排序:

var arr = [3,6,7,2,6,4,1,6,8,24,12,53];
function sort(arr){
    // 当数组的长度小于1的时候结束递归
    if(arr.length==1){
        return arr;
    }
    var min = arr[0],index = 0;
    for(var i=0;i<arr.length;i++){
        // 计算最小值,如果数组当前值比之前的值还小那么min等于最小值。
        if(arr[i]<min){
            min = arr[i];
            // 保存下最小值的索引,好用来后面删除它
            index = i;
        }
    }
    // 删除最小值
    var prev = arr.splice(index,1);
    // 通过递归,将这一轮中的最小值合并下一轮的最小值,直到arr的length为1停止递归。
    return prev.concat(sort(arr));
}
console.log(sort(arr));

原理分析:

  1、获取当前数组中最小的那个值。

  2、获取最小值的分析:随便从数组中拿出一个值,把这个拿出来的值当做最小值,然后和后面的值比较,如果后面的值比这个当前的值还小,那么我们把拿出来的那个值赋值成那个更小的值。

  3、保存那个最小值的索引,因为我们需要删除这个最小值,好获取下一轮第二小的值,不然下一轮的最小值还是这个值。

  4、删除数组中的最小值。

  5、因为一次只能获取一个最小值,所以我们需要通过递归,不断地重复调用它。

 

在前面的一篇文章中我还写给另外个两种排序算法,如果你对算法感兴趣的话可以看看js数组冒泡排序,快速排序的原理以及实现这篇文章。

 

2、数组去重:

var arr = [3,6,7,2,5,5,6,4,1,6,8,24,12,53];
function sort(arr){
    var obj = {};
    var t = [];
    for(var i=0;i<arr.length;i++){
        // 判断这个对象的属性是否和数组的值相同,相同则不添加,否则给这个对象添加这个值
        if(!(obj[arr[i]]===arr[i])){
            obj[arr[i]] = arr[i];
            // 把这个过滤完以后的值添加到我们的新数组中。
            t.push(arr[i]);
        }
    }
    return t;
}
console.log(sort(arr));

原理分析:

  1、创建一个空对象和一个空数组,空对象用来过滤数组中相同的值,而空数组用来保存过滤以后的值。

  2、循环判断这个空对象的值是否和数组中的值一样,如果一样就不理会,如果这个对象中没有这个值就添加,并且把这个值添加到我们创建的数组中。