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)文章
利用JavaScript實(shí)現(xiàn)的10種排序算法總結(jié)
這篇文章主要介紹了利用JavaScript實(shí)現(xiàn)的十種排序算法,主要介紹了冒泡,選擇,插入,希爾,歸并,快速,堆排,計(jì)數(shù),桶排和基數(shù),有感興趣的小伙伴可以參考閱讀本文2023-05-05
JS實(shí)現(xiàn)隨機(jī)點(diǎn)名器
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)隨機(jī)點(diǎn)名器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
javascript實(shí)現(xiàn)點(diǎn)擊后變換按鈕顯示文字的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)點(diǎn)擊后變換按鈕顯示文字的方法,可實(shí)現(xiàn)顯示一些按鈕如果點(diǎn)擊了,按鈕文本變?yōu)椤包c(diǎn)了”,其他按鈕文本變?yōu)椤皼]點(diǎn)”的效果,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05
JS+CSS實(shí)現(xiàn)實(shí)用的單擊輸入框彈出選擇框的方法
這篇文章主要介紹了JS+CSS實(shí)現(xiàn)實(shí)用的單擊輸入框彈出選擇框的方法,實(shí)例分析了javascript操作select及button的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02
微信小程序?qū)崿F(xiàn)經(jīng)典window掃雷游戲
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)經(jīng)典window掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09
JavaScript?ES6?Class類全方位進(jìn)階指南
在ES6中class(類)作為對(duì)象的模板被引入,可以通過class關(guān)鍵字定義類,這篇文章主要介紹了JavaScript ES6 Class類全方位進(jìn)階指南的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2026-04-04
zeroclipboard 單個(gè)復(fù)制按鈕和多個(gè)復(fù)制按鈕的實(shí)現(xiàn)方法
最近網(wǎng)站改版想讓復(fù)制代碼功能在多個(gè)瀏覽器上都可以實(shí)現(xiàn),最近看網(wǎng)上不少說我們的代碼復(fù)制功能不好用的,我們最近將會(huì)增加代碼高亮等功能,希望大家多多支持我們2014-06-06
JS 用6N±1法求素?cái)?shù) 實(shí)例教程
顯然,當(dāng)N≥1時(shí),6N,6N+2,6N+3,6N+4都不是素?cái)?shù),只有形如6N+1和6N+5的自然數(shù)有可能是素?cái)?shù)。所以,除了2和3之外,所有的素?cái)?shù)都可以表示成6N±1的形式(N為自然數(shù))。2009-10-10
Bootstrap每天必學(xué)之柵格系統(tǒng)(布局)
Bootstrap每天必學(xué)之柵格系統(tǒng),小編對(duì)Bootstrap柵格系統(tǒng)(布局)也很陌生,特分享整理這篇文章,感興趣的小伙伴們可以參考一下2015-11-11

