js一些常用的算法

数组去重

  • 双循环
let arr=[1,3,5,7,1,6,6,5,1];
    for(let i=0;i<arr.length;i++){
        for(let j=i+1;j<arr.length;j++){
            if(arr[j]==arr[i]){
                arr.splice(j,1);
                j--;
            }
        }
    }
    console.log(arr)
  • 利用对象相同属性
const arr=[1,3,5,7,1,6,6,5,1],obj={},arr2=[];
    for(let i=0;i<arr.length;i++){
        if(obj[arr[i]]==arr[i]){
            arr.splice(i,1);
            i--;
        }else{
            obj[arr[i]]=arr[i];
            arr2.push(arr[i]);
        }
    }
    console.log(arr2)
  • 利用ES6的set
const arr=[1,3,5,7,1,6,6,5,1];
const arr2=Array.from(new Set(arr))
  • 比对所有数据类型的值
const arr=[1,3,5,7,1,6,6,5,1],obj={},arr2=[];
    for(let i=0;i<arr.length;i++){
       if (!(obj[ary[i] + typeof ary[i]])) {
                arr2.push(ary[i]); 
                obj[ary[i] + typeof ary[i]] = 1
            }
    }
    console.log(arr2)

冒泡排序

 const arr=[1,3,5,7,1,6,6,5,1]
    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]){
                var temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
console.log(arr)

快速排序

const arr=[1,3,5,7,1,6,6,5,1]
    function quickSort(arr){
        if(arr.length<=1){
            return arr;
        }
        var left=[],right=[];
        var midIndex=Math.floor(arr.length/2);
        var midIndexVal=arr.splice(midIndex,1);
        for(let i=0;i<arr.length;i++){
            if(arr[i]<midIndexVal){
                left.push(arr[i])
            }else{
                right.push(arr[i])
            }
        }
        return quickSort(left).concat(midIndexVal,quickSort(right));
    }
    console.log(quickSort(arr))

二维数组乱序

let arr=[obj1,obj2,obj3,obj4,obj5];
for(let i=0;i<arr.length;i++){
  arr[i].index=Math.random()
};
arr.sort(function(a,b){
  return a.index-b.index;
})
console.log(arr)

生成斐波那契数列

  • 又称黄金分割数列,值得是一个数列:0、1、2、3、5、8、13、21、34....,在数学上,斐波拉契数列主要考察递归的调用。
function getFibonacci(n) {
    var fibarr = [];
    var i = 0;
    while(i < n) {
        if(i <= 1) {
            fibarr.push(i);
        } else {
            fibarr.push(fibarr[i - 1] + fibarr[i - 2])
        }
        i++;
    }
    return fibarr;
}
console.log(getFibonacci(10))//[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

阶乘

  • 递归实现
function factorialize(num) {
        var i=0,result;
        if(num<=1){
            return 1;
        }
        return num * factorialize(num-1);
    }
console.log(factorialize(5))1*2*3*4*5=120;
  • 也可以用while循环实现
function factorialize(num) {
  if(num<=0)return -1;
  if(num==1)return  1;
  var result=1; 
  while(num>1){
    result *= num--;
  }
  return result;
}

后续会继续补充

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-code.h...
    eddy_wiki阅读 9,477评论 0 30
  • 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大奖:点击这里领取 在...
    HetfieldJoe阅读 1,929评论 0 14
  • 虽说我们很多时候前端很少有机会接触到算法,但对算法的理解和掌握是一个优秀工程师的评价标准之一,而且当我们面对较为复...
    emoipower阅读 1,323评论 0 2
  • 北海涠洲岛大概是我去过最南的地方,一路高铁、大巴、游轮,在海上经历两个小时过山车一样的剧烈颠簸之后,...
    熹微微VAN阅读 361评论 3 4
  • 小小自我阅读 260评论 0 0

友情链接更多精彩内容