格式化电话号码会导致输出错误

时间:2018-05-18 18:19:56

标签: javascript

我的输出格式不是我想要的格式。

我得到(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(""));

1 个答案:

答案 0 :(得分:0)

使用原始代码,(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('');
}

template literals结合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);
}