开发一个清理用户输入的电话号码的功能 - 家庭作业警告

时间:2016-12-12 19:48:19

标签: javascript function if-statement

如果不使用最后一个数字返回数组[2],我无法得到我的第三个。非常感谢你在片上出错的任何帮助。

  

问题:开发一个清理输入的电话号码的功能   用户。
  规则如下:

     
      
  • 如果电话号码小于10位或大于11位,则认为号码不合适
  •   
  • 如果电话号码是10位数,则认为它是好的
  •   
  • 如果电话号码是11位且第一个号码是1,请修剪1并使用最后10位数字
  •   
  • 如果电话号码是11位且第一个号码不是1,那么这是一个不好的号码。
  •   
     

提示:您可能需要使用charAt方法。

var phoneNumbers = ["456799", "1234567898", "12345678911", "23456789101"];   

function phoneNumberCleanUp(array) {
    for (var i = 0; i < array.length; i++) {
        if ((array[i].length < 10) && (array[i].length > 11)) {
            console.log("This is a bad number: " + array[i]);

        } else if (array[i].length === 10) {
            console.log("This is a good number: " + array[i]);

        } else if ((array[i].length === 11) && (array[i].charAt(0) === "1")) {
            console.log("This is a good number: " + array[i].slice(array[i].length, -1));

        } else if ((array[i].length === 11) && (array[i].charAt(0) !== 1)) {
            console.log("This is a bad number also: " + array[i]);

        } else {
            console.log("This is a bad number too: " + array[i]);
        }
    }
  }

phoneNumberCleanUp(phoneNumbers);

2 个答案:

答案 0 :(得分:1)

简单修复:else if ((array[i].length === 11) && (array[i].charAt(0) !== '1'))

比较字符串1,而不是数字1.此时切片也有一点不同:

console.log("This is a good number: " + array[i].slice(1, array[i].length));

就个人而言,我更喜欢这样写:

var phoneNumbers = ["456799", "1234567898", "12345678911", "23456789101"];

const phoneNumberCleanUp = phoneNumbers => {
    phoneNumbers.forEach(phoneNumber => {
      if (phoneNumber.length === 10)
        console.log('This is a good number:', phoneNumber);
      else if ((phoneNumber.length === 11) && phoneNumber.startsWith('1'))
        console.log('This is a good number:', phoneNumber.substring(1));
      else
        console.log('This is a bad number:', phoneNumber);
    });
};
phoneNumberCleanUp(phoneNumbers);

答案 1 :(得分:0)

<=> ===运算符和!==运算符也比较变量的类型,但==和!=运算符只比较值,因为1 ==&#39; 1&#39;返回true,首先将它们转换为相同的类型然后比较它们的值,但是1 ===&#39; 1&#39;返回false,因为1是整数,&#34; 1&#34;是一个字符串,他也比较类型。

引自JavaScript The Definitive Guide第6版:

等于运算符==就像严格相等运算符(===),但它不那么严格。如果两个操作数的值不是同一类型,它会尝试某些类型转换并再次尝试比较。

严格相等运算符===计算其操作数,然后按如下方式比较这两个值,不执行类型转换。

所以请保留你的!==运营商,但要将1更改为&#39; 1&#39;

如果我将使用1个索引中的子串,10个字符转发

,那么你的第二个
function phoneNumberCleanUp(array) {
        for (var i = 0; i < array.length; i++) {
            if ((array[i].length < 10) && (array[i].length > 11)) {
                console.log("This is a bad number: " + array[i]);

            } else if (array[i].length === 10) {
                console.log("This is a good number: " + array[i]);

            } else if ((array[i].length === 11) && (array[i].charAt(0) === "1")) {
                console.log("This is a good number: " + array[i].substring(1 , 10));

            } else if ((array[i].length === 11) && (array[i].charAt(0) !== '1')) {
                console.log("This is a bad number also: " + array[i]);
            } else {
                console.log("This is a bad number too: " + array[i]);
            }
        }
      }
    phoneNumberCleanUp(phoneNumbers);