### 一:判斷美元符號格式
完成一個函數 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框架
- 小程序
- 微信專題
- 支付寶專題