/** * 实现一个`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) { }