JS算法问题记录——长期更新

算法很重要!即使前端也不例外!

这不是一篇洗脑文,仅以此篇随笔来记录遇到过的与前端有关的算法问题。当然了,作为一枚小白,涉及到的问题可能都偏于简单。这篇随笔长期更新~以督促自己!

1.数组去重问题

详细请看此文

数组去重算是一道比较经典的算法问题了。输入一个数组,输出的数组中要求不能有重复数据项。

方法一(顺序输出,兼容不佳)

思路:使用JS中Array所提供的indexOf方法来匹配是否含有该数组项,若无则添加到临时变量去。如此反复,返回新数组。(此方法每次返回的都是遇到的第一个重复项,例如数组[10,2,2,1,3,10],返回[10,2,1,3])。此方法不适用于IE9以下的浏览器(indexOf方法的兼容问题)。

function unique(arr){
    //用来存储结果
    var newArr = [];
    //遍历newArr数组中是否含有某数据项,若无,增添该项
    for(var i=0,len=arr.length;i<len;i++){
        if(newArr.indexOf(arr[i]) == -1){
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

方法二 (倒叙输出,兼容佳)

当然了,方法一不适用于低版本的浏览器,为了兼容所有的浏览器,还有其他的方法,在此列出一种。这个方法数组的结果是倒叙,例如例如数组[10,2,2,1,3,10],返回[2,1,3,10]),即按照最后一次出现的项排序输出。

思路:

  1. 有两个哨兵(指针,暂名为i和j),每次哨兵i要和除了哨兵i以外的所有项去比较是否相等,由哨兵j来控制数据项。
  2. 如若遇见相等的数据项,哨兵i就往前移动一个位置(有点舍弃这个项的意思),直到哨兵j移动到最后一个位置,将没有重复的项即哨兵i所在的位置的项放到新数组中去。
  3. 如此反复。
function unique2(arr){
    var newArr = [];
    for(var i=0,len=arr.length;i<len;i++){
        for(var j=i+1;j<len;j++){
            if(arr[i] == arr[j]){
                ++i;
            }
        }
        newArr.push(arr[i]);
    }
    return newArr;
}

2.怪异计算

前段时间投了网易的前端岗,遇到一个题目,题目大意为:在正常的运算中是先乘除后加减,但是现在存在一种怪异的运算,是按顺序计算的。例如2+3*4,正常的运算是先算出2+(3*4),但是怪异计算是(2+3)*4。(所有的数字范围在0-9之间)最后输出运算的结果。

由于js数据是弱类型且是按值传递的,所以存在传值问题,直接传递式子会导致函数获取到的是结果。所以传参只能使用字符串形式传参。目前没有想到好的解决方案。(有思路了之后再更新)

思路:正则拆分字符串,符号为一组,数字为一组。

function calc(str){
    
    // 匹配字符串是否为式子
    if(!(/^([0-9](\+|\-|\*|\/))+([0-9]$)/g).test()){
        console.log("wrong enter");
        return;
    }
    
    //匹配出运算符
    var num = str.match(/(\*|\+|\-|\/)/g);
    //匹配出数字
    var tag = str.match(/[0-9]/g);
    
    var result = num[0];
    for(var i=0,len=tag.length;i<len;i++){
        switch(tag[i]){
            case '+':
                result += num[i+1];
                break;
            case '-':
                result -= num[i+1];
                break;
            case '*':
                result *= num[i+1];
                break;
            case '/':
                result /= num[i+1];
                break;
        }
    }
    console.log(result);
}

posted @ 2017-03-26 21:24  FIONA-SUN  阅读(221)  评论(0编辑  收藏  举报