格式化电话号码会产生错误的输出



我的输出没有按照我想要的方式格式化。

我得到(123) 4567890-,但我想要(123) 456-7890

// Display as Phone number: (123) 456-7890
var num = [1, 2, 3, 4, 5, 6, 7, 8, 9 , 0];
var zip = [];
var mid = [];
var last = [];
for (i=0; i< 10; i++) {
	    if (i < 3) {
		    zip.push(num[i]);
	    } else if (2 < i < 6) {
		    mid.push(num[i]);
	    } else {
		    last.push(num[i]);
	    }
}
console.log('(' + zip.join("") + ') ' + mid.join("") + '-' + last.join(""));

使用原始代码,(2 < i < 6)是出错的地方。

它说"如果 2 小于 i,其结果小于 6"。这永远是正确的,因为boolean表达式"2"小于"i">要么为真,要么为假,并且当真/假解析为1/0时,它将始终小于6。

而是仅使用(i < 6)。它将捕获小于 6 的i,但永远不会捕获小于 3 的那些,因为它们将在您的第一个if语句中捕获。

// Display as Phone number: (123) 456-7890
var num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
var zip = [];
var mid = [];
var last = [];
for (i = 0; i < 10; i++) {
if (i < 3) {
zip.push(num[i]);
} else if (i < 6) {
mid.push(num[i]);
} else {
last.push(num[i]);
}
}
console.log('(' + zip.join("") + ') ' + mid.join("") + '-' + last.join(""));


以下是您可能会发现更简单的其他几种方法。

使用splice将括号和破折号注入数组

var num = [1, 2, 3, 4, 5, 6, 7, 8, 9 , 0];
console.log( formatMyNumber(num) ); 
function formatMyNumber(arr) {
arr.splice(0, 0, "(");
arr.splice(4, 0, ") ");
arr.splice(8, 0, "-");  
return arr.join('');
}

或模板文字与slice结合并切掉3 个数字范围

var num = [1, 2, 3, 4, 5, 6, 7, 8, 9 , 0];
console.log( formatMyNumber(num) ); 
function formatMyNumber(a) {
a = a.join('');
return `(${a.slice(0,3)}) ${a.slice(3,6)}-${a.slice(6)}`;
}

或者只是与slice连接

var num = [1, 2, 3, 4, 5, 6, 7, 8, 9 , 0];
console.log( formatMyNumber(num) ); 
function formatMyNumber(a) {
a = a.join('');
return '(' + a.slice(0,3) + ') ' + a.slice(3,6) + '-' + a.slice(6);
}

最新更新