阿里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) {
}
#阿里巴巴##笔经#