首页 > 阿里1688笔试 (2021.3.5凉)一个小时,4个js题
头像
sumisu
编辑于 2021-04-07 20:09
+ 关注

阿里1688笔试 (2021.3.5凉)一个小时,4个js题

/**
* 实现一个`Foo`方法,接受函数`func`和时间`wait`
* 返回一个新函数,新函数即时连续多次执行,但也只限制在`wait`的时间执行一次
*/
function Foo(func, wait) {
    let time;
    let args = arguments  

    return function(args) {
        if(time) {  //如果time已经设置了,就return
            return;
        }
        time = setTimeout(()=>{
            clearTimeout(time) //清除定时器
        },wait)  //每wait时间内执行一次
    }

}

/**
* 判断括号匹配
* 说明:给定一个只包含 '() {} []' 6种字符的字符串,
*   实现一个方法来检测该字符串是否合法,其规则为'()'、'{}'、'[]'必须互相匹配,可嵌套。
* 示例:
*   isValid('(');          // false
*   isValid('()');         // true
*   isValid('()[]{}');     // true
*   isValid('{()[]}');     // true
*   isValid('(]');         // false
*   isValid('([)]');       // false
*   isValid('({}[]([]))'); // true
*/
function isValid(s){
    let stack = []

    for(let i=0;i < s.length;i++){
        let temp = s[i];
        if(temp == '{' || temp == '(' || temp == '[') {//如果遇到左括号,就入栈
            stack.push(temp);
        }else {
            if(stack.length == 0) {//栈空,说明没有可以匹配的元素
                return false;
            }
            let tp = stack[stack.length - 1];
            if(tp == '(' && temp == ')' || tp == '[' && temp == ']'
            || tp == '{' && temp == '}'){ //括号匹配上了,就出栈
                stack.pop();
            }else {
                return false;  //如果没匹配,提前返回false
            }
        }
    }
    return stack.length == 0; //如果最后栈为空了,说明元素全部匹配完了
}



/**
* 找出数组中第k大和第m大的数字相加之和
* 说明:实现一个方法,找出数组中第k大的和第m大的数字相加之和
* 示例:
*   let arr = [1,2,4,4,3,5], k = 2, m = 4
*   findTopSum(arr, k, m); // 第2大的数是4,出现2次,第4大的是2,出现1次,所以结果为10
*/
function findTopSum(arr, k, m) {
        let newarr = arr.slice(0);
        let set = new Set(newarr);
        let tparr = Array.from(set);
        tparr.sort((a,b)=>(a-b)); //排序,从小到大,方便找到第几大的数字
        //arr.sort((a,b)=>(a-b)); //数组也排序

        let len = tparr.length;
        let kMax = tparr[len-k]; //找出第k大的数
        let mMax = tparr[len-m]; //找出第m大的数
        // console.log(kMax,mMax)

        let sum = 0; //总和初始化为0
        for(let i=0;i < arr.length;i++){
            if(arr[i] == kMax || arr[i] == mMax){
                sum += arr[i];
            }
        }
        return sum;
    }



/**
* 对象扁平化
* 说明:请实现 flatten(input) 函数,input 为一个 javascript 对象(Object 或者 Array),返回值为扁平化后的结果。
* 示例:
*   var input = {
*     a: 1,
*     b: [ 1, 2, { c: true }, [ 3 ] ],
*     d: { e: 2, f: 3 },
*     g: null,
*   }
*   var output = flatten(input);
*   output如下
*   {
*     "a": 1,
*     "b[0]": 1,
*     "b[1]": 2,
*     "b[2].c": true,
*     "b[3][0]": 3,
*     "d.e": 2,
*     "d.f": 3,
*     // "g": null,  值为null或者undefined,丢弃
*  }
*/
没做出
function flatten(input) {
}

全部评论

(0) 回帖
加载中...
话题 回帖
历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐