牛客网JS能力测评
weixin_43160613
小菜鸟的坚持历程
展开
-
JS能力测评39:属性遍历
思路:function iterate(obj) { var arr=[]; for(var key in obj){ if(obj.hasOwnProperty(key)){ arr.push(key+ ': '+obj[key]); } } return arr;}原创 2019-01-16 10:07:39 · 99 阅读 · 0 评论 -
JS能力测评23:返回函数
思路:首先执行functionFunction('Hello'),传入参数str,然后返回函数f,f与('world')组合,执行f('world'),传入参数s,f返回str+", "+s,即Hello, world。注意中间的逗号后面有一个空格。function functionFunction(str) { var f=function(s){ return...原创 2019-01-08 14:00:16 · 134 阅读 · 0 评论 -
JS能力测评22:函数的上下文
思路:在JavaScript中,函数是一种对象,其上下文是可以变化的,对应的,函数内的this也是可以变化的,函数可以作为一个对象的方法,也可以同时作为另一个对象的方法,可以通过Function对象中的call或者apply方法来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数。将函数 fn 的执行上下文改为 obj 对象,只需要将obj作为call或者app...原创 2019-01-08 13:47:25 · 102 阅读 · 0 评论 -
JS能力测评33:二进制转换
思路:function valueAtBit(num, bit) { var s = num.toString(2); return s[s.length - bit]; }位移运算搞定: function valueAtBit(num, bit) { return (num >> (bit -1)) & 1;} ...原创 2019-01-13 10:50:06 · 137 阅读 · 0 评论 -
JS能力测评32:模块
思路:声明对象有两种常见的方式:var obj = {};和var obj = new Object();。前面一种可以直接在括号中以key:value的方式定义属性,后一种采用点运算符给对象添加属性。字面量模式:function createModule(str1, str2) { var obj={ greeting:str1, name:s...原创 2019-01-13 10:41:18 · 120 阅读 · 0 评论 -
JS能力测评43:获取指定字符串
思路:是连续3个数字,而不是3个连续的数字function captureThreeNumbers(str) { //声明一个数组保存匹配的字符串结果 var arr = str.match(/\d{3}/); //如果arr存在目标结果,则返回第一个元素,即最早出现的目标结果 if(arr) { return arr[0]; ...原创 2019-01-18 10:00:49 · 121 阅读 · 0 评论 -
JS能力测评42:判断是否以元音字母结尾
思路:首先确定元音集合[a,e,i,o,u],然后是以元音结尾,加上$,最后通配大小写,加上i。因此正则表达式为:/[a,e,i,o,u]$/i,最后用test方法去检测字符串strfunction endsWithVowel(str) { var b=/[a,e,i,o,u]$/i return b.test(str); } ...原创 2019-01-18 09:53:55 · 639 阅读 · 0 评论 -
JS能力测评13:求二次方
思路:方法一:map()方法function square(arr) { return arr.map(function(val){ return val*val; })}方法2:forEach()方法function square(arr) { //声明一个新的数组存放结果 var a = []; arr.for...原创 2019-01-03 09:58:46 · 264 阅读 · 0 评论 -
JS能力测评12:查找重复元素
思路:将传入的数组arr中的每一个元素value当作另外一个新数组b的key,然后遍历arr去访问b[value],若b[value]不存在,则将b[value]设置为1,若b[value]存在,则将其加1。可以想象,若arr中数组没有重复的元素,则b数组中所有元素均为1;若arr数组中存在重复的元素,则在第二次访问该b[value]时,b[value]会加1,其值就为2了。最后遍历b数组,将...原创 2019-01-03 09:39:30 · 131 阅读 · 0 评论 -
JS能力测评31:且运算
思路:function and(a, b) { return a&&b;}原创 2019-01-12 10:00:16 · 270 阅读 · 1 评论 -
JS能力转换34:二进制转换
思路:parseInt方法的可选参数是操作数的进制说明,不是目标的进制。数字转字符用toString(),字符转数字用parseInt() or parseFloat.function base10(str) { return parseInt(str,2);} ...原创 2019-01-14 09:23:09 · 727 阅读 · 1 评论 -
JS能力测评35:二进制转换
思路:function convertToBinary(num) { str=num.toString(2); while(str.length<8) { str = '0'+str; } return str; }原创 2019-01-14 09:30:19 · 150 阅读 · 0 评论 -
JS能力测评38:批量改变对象的属性
思路:这是原型链问题。访问一个对象的方法或者是属性,首先会在该对象中寻找,如果找到则返回,如果没找到,则在其原型链上面向上寻找,直至基原型,如还未找到,则返回undefined。将 constructor 的所有实例的 greeting 属性指向给定的 greeting 变量,只需要在constructor的原型上面添加greeting属性,并指定值。function alterObje...原创 2019-01-16 10:03:32 · 194 阅读 · 0 评论 -
JS能力测评27:使用 apply 调用函数
因为arguments并非真正的数组,因此要获得callIt的第一个参数之后的所有参数,不能直接使用slice方法截取,需要先将arguments转换为真正的数组才行。有两种常见的方法,一是使用slice方法:var args = Array . prototype . slice . call ( arguments );二是循环遍历逐一填入新数组。在获得了args之后,就可以调用apply来执...原创 2019-01-10 09:37:17 · 143 阅读 · 0 评论 -
JS能力测评26:使用 arguments
思路:本题考查的是对于arguments的使用,arguments能获得函数对象传入的参数组,类似与一个数组,能够通过length获取参数个数,能通过下标获取该位置的参数,但是它不能使用forEach等方法。本题先通过arguments.length获得参数个数,然后循环求和,得出结果。function useArguments() { var result=0; for...原创 2019-01-10 09:19:44 · 122 阅读 · 0 评论 -
JS能力测评37:改变上下文
思路:在JavaScript中,函数是一种对象,其上下文是可以变化的,对应的,函数内的this也是可以变化的,函数可以作为一个对象的方法,也可以同时作为另一个对象的方法,可以通过Function对象中的call或者apply方法来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数。将函数 fn 的执行上下文改为 obj 对象,只需要将obj作为call或者app...原创 2019-01-15 10:03:17 · 354 阅读 · 0 评论 -
JS能力测评36:乘法
思路:function multiply(a, b) { return a*b;}function multiply(a, b) { return a*b*10000*10000/10000/10000}原创 2019-01-15 09:40:05 · 190 阅读 · 0 评论 -
JS能力测评25:二次封装函数
思路:partial(sayIt, 'Hello', 'Ellie')('!!!');首先执行partial(sayIt, 'Hello', 'Ellie'),将参数传入,然后返回函数result与('!!!')组合成result('!!!')执行。于是,可以在result函数里调用fn,因为函数的参数固定为三个,因此可以用call方法去调用函数fn。function partial(f...原创 2019-01-09 13:04:12 · 135 阅读 · 0 评论 -
JS能力测评24:使用闭包
思想:简单的描述闭包:如果在函数func内部声明函数inner,然后在函数外部调用inner,这个过程即产生了一个闭包。function makeClosures(arr, fn) { var result = []; arr.forEach(function (obj) { result.push(function () { re...原创 2019-01-09 11:41:38 · 119 阅读 · 1 评论 -
JS能力测评45:判断是否符合 USD 格式
思路:本题注意点有必须是USD格式,以$开头,数字结尾,$和小数点的转义。首先,开头必是$,而正则表达式中$表示结尾,需要进行转义,因此开头为^\$然后$后必然接数字,并且最少一位,最多三位数,可用{m,n}表示,最少m位,最多n位,因此此段为\d{1,3}接着,后面如还有数,则必然有,分隔,并且后面必有3个数,类似于,XXX的格式会出现0或者n次,因此此段可表示为(,\d{3})*最...原创 2019-01-19 12:35:50 · 227 阅读 · 0 评论 -
JS能力测评44:判断是否符合指定格式
思路:本题需要注意格式,开头^和结尾$必须加上来限定字符串,3个数可表示为\d{3},4个数则为\d{4},{n}表示前面内容出现的次数。正则表达式可写作/^\d{3}-\d{3}-\d{4}$/,有相同部分\d{3}-,因此也可写作/^(\d{3}-){2}\d{4}$/function matchesPattern(str) { var b=/^(\d{3}-){2}\d{4...原创 2019-01-19 12:25:34 · 164 阅读 · 0 评论 -
JS能力测评30:或运算
思路:function or(a, b) { return a||b;}原创 2019-01-12 09:58:10 · 128 阅读 · 0 评论 -
JS能力测评21:函数传参
思路:调用函数有3种方式:obj.func();func.call(obj,args);//参数列出func.apply(obj,[m,n......]);//参数数组function argsAsArray(fn, arr) { return fn.apply(this,arr);} ...原创 2019-01-07 09:56:14 · 111 阅读 · 0 评论 -
JS能力测评20:流程控制
思路:根据题目要求,先判断num是否为空以及是否是Number类型,再依次判断是否可以整除3,整除5等function fizzBuzz(num) { if ( num==null || typeof (num)!="number") { return false; } else if (num%3==0 && num%5=...原创 2019-01-07 09:44:36 · 86 阅读 · 0 评论 -
JS能力测评14:查找元素位置
思路:function findAllOccurrences(arr, target) { var a=[] for(var i =0;i<arr.length;i++){ if(arr[i]==target){ a.push(i); } } return a;} function fi...原创 2019-01-04 20:00:51 · 152 阅读 · 0 评论 -
JS能力测评6:删除数组最后一个元素
思路:先复制在删除,这样就不直接修改arr了function truncate(arr) { newarr=arr.slice(0); newarr.pop(); return newarr;}人家大佬的思路,值得学习 //利用slicefunction truncate(arr) { return arr.slice(0,-1);}//...原创 2018-12-25 09:39:14 · 12547 阅读 · 1 评论 -
JS能力测评5:添加元素
思路:方法1:先运用slice函数复制,然后在运用push函数插入,最后返回。function append(arr, item) { var newarr=arr.slice(0); newarr.push(item); return newarr;}方法2:运用concat函数实现function append(arr, item) { ...原创 2018-12-24 09:30:58 · 103 阅读 · 0 评论 -
JS能力测评10:添加元素
思路:先复制再运用splice()方法。function insert(arr, item, index) { var newarr=arr.slice(0); newarr.splice(index,0,item); return newarr}大佬思想先保留着 /利用slice+concatfunction insert(arr, item, i...原创 2018-12-29 09:39:35 · 121 阅读 · 1 评论 -
JS能力测评4:移除数组中的元素(直接修改arr)
思路:直接运用splice函数,若arr数组元素和item相等,则删除。该处运用了一个技巧,从数组末尾开始判断,这样不用考虑删除元素而导致位置变化的影响。function removeWithoutCopy(arr, item) { for(var i=arr.length-1;i>=0;i--) { if (arr[i]==item) ...原创 2018-12-23 10:26:45 · 413 阅读 · 0 评论 -
JS能力测评3:移除数组中的元素
思路:方法1:将数组中的元素依次和item比较,若不相等则放入新的数组,反之则舍弃。function remove(arr, item) { var result=[]; for(var i=0;i<arr.length;i++) { if (arr[i]!=item) { result.push(ar...原创 2018-12-23 10:10:57 · 98 阅读 · 0 评论 -
JS能力测评9:数组合并
运用concat()方法 function concat(arr1, arr2) { return arr1.concat(arr2)}大佬的思想://利用slice+push.applyfunction concat(arr1, arr2) { var newArr=arr1.slice(0); [].push.apply(newArr, arr2);...原创 2018-12-28 09:53:23 · 87 阅读 · 0 评论 -
JS能力测评8:删除数组第一个元素
思路:先复制再运用shift()方法。function curtail(arr) { var newarr=arr.slice(0); newarr.shift(); return newarr}大佬的思想复制过来以后学习下//利用slicefunction curtail(arr) { return arr.slice(1);}//利用...原创 2018-12-27 09:29:56 · 1626 阅读 · 0 评论 -
JS能力测评2:数组求和
思路:reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值 并返回function sum(arr) { return arr.reduce(function (total,currentValue) { return total + currentValue; });}常规方法:fun...原创 2018-12-21 10:03:51 · 166 阅读 · 0 评论 -
JS能力测评15:避免全局变量
思路:在Javascript语言中,声明变量使用的都是关键字var,如果不使用var而直接声明变量,则该变量为全局变量。function globals() { var myObject = { name : 'Jory' }; return myObject;} ...原创 2019-01-04 20:03:44 · 88 阅读 · 0 评论 -
JS能力测评16:正确的函数定义
思路:这道题是考函数声明与函数表达式的区别,原题的写法,是在两个逻辑分支里面各有一个函数声明,但是对于函数声明,解析器会率先读取并且让其在执行任何代码前可用,意思就是别的代码还没运行呢,两个getValue声明已经被读取,所以总是执行最新的那个。函数表达式,当解析器执行到它所在的代码行时,才会真正被解释执行,所以两个逻辑分支可以分别执行。else中的语句相当于将if中的function重写...原创 2019-01-05 10:36:15 · 117 阅读 · 0 评论 -
JS能力测评41:检查重复字符串
思路:function containsRepeatingLetter(str) { var b=/([a-zA-Z])\1/; return b.test(str)}原创 2019-01-17 13:32:12 · 119 阅读 · 0 评论 -
JS能力测评40:判断是否包含数字
思路:判断字符串中是否含有数字,可以用正则表达式。/\d/可以匹配字符串中的数字字符,用test方法可以检测。function containsNumber(str) { var b = /\d/; return b.test(str); } ...原创 2019-01-17 13:19:21 · 1505 阅读 · 0 评论 -
JS能力测评11:计数
思路:遍历的方法function count(arr, item) { var num=0; for(var i=0;i<arr.length;i++) { if (arr[i]==item) { num+=1; } } return num}forEach循环看起...原创 2019-01-02 09:47:17 · 110 阅读 · 0 评论 -
JS能力测评19:计时器
思路: function count(start, end) { //第一个数立即输出 console.log(start++); //利用setInterval方法计算间隔多长时间输出一个数字 var timer = setInterval(function () { if (start <= end) { ...原创 2019-01-06 10:03:51 · 161 阅读 · 0 评论 -
JS能力测评18:完全等同
思路:一般使用双等来判断(==),如果还需要类型相同那么就用三等(===)。说一下这两个的区别:== equality 等同,=== identity 恒等。==, 两边值类型不同的时候,要先进行类型转换,再比较。 ===,不做类型转换,类型不同的一定不等。 先说 ===,这个比较简单。下面的规则用来判断两个值是否===相等: 1、如果类型不同,就[不相等] 2、如果两个都是数...原创 2019-01-06 09:52:39 · 2265 阅读 · 0 评论