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