企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 一:判断美元符号格式 完成一个函数 isUSDFormat 返回 true/false 来判断一个字符串是否符合美元格式: 以 $ 开头 如果是小数,保留两位小数;如果不是小数则不显示小数部分 整数部分从小数点上一位开始每隔三位用 , 分割开来 如果整数部分从数字 0 开始,则只会显示一位 0 例如: isUSDFormat('$1') // => true isUSDFormat('$1.0') // => false isUSDFormat('$100,000.00') // => true isUSDFormat('$0,000.00') // => false isUSDFormat('$0.00') // => true isUSDFormat('$11,23,345.33') // => false isUSDFormat('$1,123,345.33') // => true 答案 `const isUSDFormat = (str) => /^\$([1-9]\d{0,2}(,\d{3})*?|0)(\.\d{2})?$/.test(str)` ### 二: 谁在召唤我?(二) 实现一个函数 where,它返回它被调用的时候所在的函数的名字,例如: function main () { where() // => 'main' } function a () { function b () { where() // => 'b' } b() } main() a() where 需要在严格模式下编写。 答案: ~~~ const where = () => { try { throw new Error() } catch (e) { return e.stack.split('\n')[2].match(/at\s(.+?)\s/)[1] } } ~~~ ### 三:谁在召唤我? 实现一个函数 where,它返回它被调用的时候所在的函数的名字,例如: function main () { where() // => 'main' } function a () { function b () { where() // => 'b' } b() } main() a() 答案: ~~~ function where () { try { throw new Error() } catch (e) { return e.stack.split('\n')[2].match(/at\s(.+?)\s/)[1] } } ~~~ ### 四:queryString 分析器 在开发当中,我们经常要处理 url。而 url 上的 query string 是我们重点要处理的对象,完成一个 parseQueryString 函数。它接受一个 url 字符串作为参数,返回一个对象,这个对象包含 query string 上的键值对。例如: parseQueryString('https://scriptoj.com/problems?offset=100&limit=10') 返回: { offset: '100', limit: '10'} 特殊情况说明:如果出现 ?name=&age=12 则返回 { name: '', age: '12' },如果 ?name&age=12 则返回 { name: null, age: '12' }。 请考虑清楚 query string 可能出现的各种情况,包括可能的出现 hash 的情况(?name=jerry#nice)。 如果需要帮助,可以对照参 URI.js 的执行结果。 (本题来源:阿里巴巴前端笔试题) 答案: ~~~ function parseQueryString (url) { var a = document.createElement('a') a.setAttribute('href', url) var search = a.search var query = {} var kvs = search.replace(/^\?/, '').split(/&/g) kvs.forEach(function (kv) { kv = kv.split('=') if (!kv[0]) return if (kv.length === 2) { query[kv[0]] = kv[1] } else if (kv.length > 2) { query[kv[0]] = kv.slice(1).join('=') } else { query[kv[0]] = null } }) return query } ~~~ ### 五:转换驼峰命名 小科去了一家新的公司做前端主管,发现里面的前端代码有一部分是 C/C++ 程序员写的,他们喜欢用下划线命名,例如: is_good。小科决定写个脚本来全部替换掉这些变量名。 完成 toCamelCaseVar 函数,它可以接受一个字符串作为参数,可以把类似于 is_good 这样的变量名替换成 isGood。 变量名首尾的下划线不需要做处理,中间的下划线全部删除并且处理成驼峰。 答案: ~~~ const toCamelCaseVar = (name) => name.replace(/([a-zA-Z])_+?([a-zA-Z])/g, (g, a, b) => `${a}${b.toUpperCase()}`) ~~~ ### 六: 正则表达式删除两端多余空白字符 完成正则表达式 TRIM_REGX,可以用它来删除一个字符串前后多余的空白字符。 例如: ' ScriptOJ '.replace(TRIM_REGX, '') // => ScriptOJ 注意:你只需要完成正则表达式的编写。 答案: ~~~ const TRIM_REGX = /(^\s*)|(\s*$)/g ~~~