### 一:判断美元符号格式
完成一个函数 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
~~~
- 前端入门
- 前端入职须知
- 正确看待前端
- 前端自我定位
- pc与手机页面差别
- 前端书单
- 前端技术栈
- 前端资源导航
- 前端切图
- 插件
- 组件、控件和插件的区别
- 技术文档
- layui
- layer弹框在实际项目中的一些应用
- 前端面试题
- bat面试题库
- 中小公司的leader
- 项目相关
- 职业规划如何
- 前端经典笔试题
- javascript基础(一)
- JavaScript基础二
- JavaScript基础面试题(三)
- JavaScript基础面试题(四)
- JavaScript基础面试题(五)
- JavaScript基础面试题(六)
- JavaScript基础面试题(七)
- JavaScript基础面试题(八)
- JavaScript基础面试题(九)
- JavaScript基础面试题(十)
- dom经典面试题
- 正则表达式
- 史上最难面试题
- 简单算法
- 前端idea
- vsc快速上手指南
- 微信开发者工具
- sublime的使用
- hbuilder入门
- 前端那些事
- 前端的注释该怎么写
- 前端架构师是怎么炼成的
- 细数前端的那些技术大牛
- 前端leader的那些事
- ps
- 图片类型及其区别
- 基本概念及其常用工具
- ps操作技巧
- ps站点资源导航
- ui站点导航
- html
- css
- js
- 插件库
- git教程
- web
- web兼容思想
- ui框架
- 小程序
- 微信专题
- 支付宝专题