JavaScript電話號(hào)碼格式化的多種實(shí)現(xiàn)方式
推特經(jīng)典面試題:
編寫一個(gè)函數(shù),[1,2,3,4,5,6,7,8,9,0] return "(123) 456-7890"電話號(hào)碼。
方法一:字符串拼接
這是最直接的方法,通過手動(dòng)拼接每個(gè)部分來形成電話號(hào)碼。相信不少小白都是通過方式解答這道題的,但是真正的高手是絕不會(huì)滿足于用最粗暴的方法解答一道題的,讓我們看看咱們還能玩出什么花樣吧~
function getPhoneNum(arr) { return "(" + arr[0] + arr[1] + arr[2] + ") " + arr[3] + arr[4] + arr[5] + "-" + arr[6] + arr[7] + arr[8] + arr[9]; } console.log(getPhoneNum([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]));
字符串拼接更好的寫法:
function createPhoneNumber(numbers) { const part1 = numbers.slice(0, 3).join(''); const part2 = numbers.slice(3, 6).join(''); const part3 = numbers.slice(6, 10).join(''); return `(${part1}) ${part2}-${part3}`; } console.log(createPhoneNumber([1,2,3,4,5,6,7,8,9,0])); // 輸出: (123) 456-7890
這種方法利用了ES6的模板字符串特性,同時(shí)使用數(shù)組的slice
方法來提取需要的部分。不難看出,es6的表達(dá)是更加語義化的,它不像普通的字符串拼接那樣機(jī)械而粗暴。對(duì)比兩種寫法不難看出返回的結(jié)果多了單引號(hào)
并把+
替換成了$
,下面來講講ES6的模板字符串
。
模版字符串
ES6模板字符串(也稱為模板字面量)提供了一種新的方式來創(chuàng)建字符串,它們使用反引號(hào)(
)而不是單引號(hào)(' ')或雙引號(hào)(" ")。模板字符串帶來了許多便利和增強(qiáng)功能,特別是當(dāng)你需要在字符串中嵌入表達(dá)式或變量時(shí)。以下是使用 $
符號(hào)(用于插值)的幾個(gè)主要好處:
1. 多行字符串
- 模板字符串可以跨越多行,而不需要使用轉(zhuǎn)義字符 `` 或連接符
+
。
const message = `這是一個(gè) 跨越 多行的 字符串`; console.log(message); // 輸出: // 這是一個(gè) // 跨越 // 多行的 // 字符串
2. 變量插值
- 使用
${}
語法可以在字符串中直接插入變量或表達(dá)式,而不需要使用字符串拼接。
const name = "Alice"; const age = 30; const message = `我的名字是 ${name},我今年 ${age} 歲。`; console.log(message); // 輸出: 我的名字是 Alice,我今年 30 歲。
3. 表達(dá)式插值
- 不僅可以插入變量,還可以插入任何有效的 JavaScript 表達(dá)式。
const a = 5; const b = 10; const result = `a + b 的結(jié)果是 ${a + b}`; console.log(result); // 輸出: a + b 的結(jié)果是 15
4. 可讀性和簡(jiǎn)潔性
- 模板字符串使代碼更易讀和簡(jiǎn)潔,特別是在處理復(fù)雜的字符串拼接時(shí)。
// 傳統(tǒng)方式 const greeting = "Hello, " + name + "! You are " + age + " years old."; // 模板字符串 const greeting = `Hello, ${name}! You are ${age} years old.`;
5. 標(biāo)簽?zāi)0?/h4>
- 模板字符串支持標(biāo)簽?zāi)0澹@是一種高級(jí)功能,允許你在模板字符串前面加上一個(gè)函數(shù)名,該函數(shù)會(huì)處理模板字符串。
function highlight(strings, ...values) {
let result = '';
strings.forEach((str, i) => {
result += str + (values[i] || '');
});
return `<span style="color: red;">${result}</span>`;
}
const name = "Bob";
const age = 25;
const message = highlight`My name is ${name}, and I am ${age} years old.`;
console.log(message);
// 輸出: <span style="color: red;">My name is Bob, and I am 25 years old.</span>
function highlight(strings, ...values) { let result = ''; strings.forEach((str, i) => { result += str + (values[i] || ''); }); return `<span style="color: red;">${result}</span>`; } const name = "Bob"; const age = 25; const message = highlight`My name is ${name}, and I am ${age} years old.`; console.log(message); // 輸出: <span style="color: red;">My name is Bob, and I am 25 years old.</span>
方法二:for循環(huán)遍歷數(shù)組和replace方法
function getPhoneNum(arr){ let format = "(xxx) xxx-xxxx" for (let i = 0; i < arr.length; i++) { format = format.replace("x", arr[i]) } return format } console.log(getPhoneNum([1,2,3,4,5,6,7,8,9,0]));
該方法用字符串變量 format
確定了格式 "(xxx) xxx-xxxx"
。再用for
循環(huán)遍歷讓其中每個(gè) x
將會(huì)被 arr
數(shù)組中的相應(yīng)數(shù)字替換。對(duì)比字符串拼接這種方法的可讀性要明顯強(qiáng)的多,可以極端地試想一下,如果輸入的數(shù)組有幾百甚至幾千個(gè)數(shù)字,使用字符串拼接寫出來的代碼會(huì)非常寬!并且寫起來也非常累。
方法三:使用join和正則表達(dá)式
這種方法首先將所有數(shù)字連接成一個(gè)字符串,然后使用正則表達(dá)式插入所需的分隔符。
function createPhoneNumber(numbers) { const phoneNumber = numbers.join(''); return phoneNumber.replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3"); } console.log(createPhoneNumber([1,2,3,4,5,6,7,8,9,0]));
這種方法的優(yōu)勢(shì)在于代碼的簡(jiǎn)潔性和較好的性能,盡管對(duì)于初學(xué)者它的表達(dá)不太直觀,但是是否能寫出簡(jiǎn)潔性能強(qiáng)的代碼是區(qū)分大佬和普通人的一個(gè)重要指標(biāo)。
結(jié)語
以上三種方法都可以達(dá)到相同的效果,選擇哪種方法主要取決于個(gè)人偏好或具體場(chǎng)景的需求。例如,如果你希望代碼更加簡(jiǎn)潔,可能會(huì)傾向于使用方法三;而如果你更看重代碼的可讀性,可能就會(huì)選擇方法一或方法二。
以上就是JavaScript電話號(hào)碼格式化的多種實(shí)現(xiàn)方式的詳細(xì)內(nèi)容,更多關(guān)于JavaScript電話號(hào)碼格式化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于JS實(shí)現(xiàn)右側(cè)緩慢彈窗動(dòng)態(tài)效果
在現(xiàn)代Web開發(fā)中,動(dòng)態(tài)交互效果是提升用戶體驗(yàn)的重要手段之一,其中,從頁(yè)面右側(cè)緩慢滑出的彈窗效果因其不遮擋主要內(nèi)容、易于用戶操作而備受歡迎,本文將詳細(xì)介紹如何使用JavaScript結(jié)合CSS3動(dòng)畫實(shí)現(xiàn)這一效果,并探討其在實(shí)際項(xiàng)目中的應(yīng)用,需要的朋友可以參考下2025-02-02Echarts實(shí)現(xiàn)暫無數(shù)據(jù)的三種方法
本文將介紹如何使用Echarts實(shí)現(xiàn)暫無數(shù)據(jù)的三種方法,詳細(xì)講解這三種方法的實(shí)現(xiàn)步驟和效果展示,幫助讀者更好地理解如何在Echarts中處理暫無數(shù)據(jù)的情況2023-08-08HTML Table 空白單元格補(bǔ)全的簡(jiǎn)單實(shí)現(xiàn)
下面小編就為大家?guī)硪黄狧TML Table 空白單元格補(bǔ)全的簡(jiǎn)單實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10layer.prompt使文本框?yàn)榭盏那闆r下也能點(diǎn)擊確定的方法
今天小編就為大家分享一篇layer.prompt使文本框?yàn)榭盏那闆r下也能點(diǎn)擊確定的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09jQuery實(shí)現(xiàn)文字自動(dòng)橫移
本文詳細(xì)介紹了通過jquery尺寸相關(guān)函數(shù)實(shí)現(xiàn)文字自動(dòng)橫移的方法。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01JavaScript動(dòng)態(tài)生成二維碼圖片
本文給大家介紹js動(dòng)態(tài)生成二維碼圖片的相關(guān)內(nèi)容,感興趣的朋友一起學(xué)習(xí)吧2016-04-04countUp.js實(shí)現(xiàn)數(shù)字動(dòng)態(tài)變化效果
這篇文章主要為大家詳細(xì)介紹了countUp.js實(shí)現(xiàn)數(shù)字動(dòng)態(tài)變化效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10