【问题标题】:How do I get my 'for loop' to return the characters I am trying to push?如何让我的“for 循环”返回我要推送的字符?
【发布时间】:2022-01-18 01:27:15
【问题描述】:

我目前正在学习 JavaScript 的基础知识,但我意识到我的知识存在明显的差距。当这个问题变得更加明显时,我最近开始尝试挑战 Codewars。我最近的努力是试图让这个“for循环”将字符推入一个数字数组,以便将其格式化为电话号码。尽管我尝试过许多不同的解决方案,但它们都没有真正做到我想要完成的事情。任何帮助弄清楚我在这里出错的地方以及我的逻辑中有哪些漏洞将不胜感激。我最好的尝试是这样的:

const createPhoneNumber = (phoneNumber) => {
    let formattedNumber = [];
    formattedNumber.push(phoneNumber)
    for (let i = 0; i < formattedNumber.length; i++) {
        if (formattedNumber[i] === 0) {
            formattedNumber.push('(')
        }
        if (formattedNumber[i] === 2) {
            formattedNumber.push(')')
        }
        if (formattedNumber[i] === 5) {
            formattedNumber.push('-')
        }
    }
    return(formattedNumber.toString());
}

console.log(createPhoneNumber(1234567890));

【问题讨论】:

    标签: javascript arrays function loops methods


    【解决方案1】:

    一些反馈:

    • 您将一项插入到数组 formattedNumber.push(phoneNumber) 中,然后循环遍历它,因此只有一次迭代
    • 相反,您可以将数字转换为字符串并使用其长度进行迭代
    • 检查 formattedNumber[i] === 00 进行比较(此检查失败,这就是您的函数返回未格式化电话号码的原因)但您想比较 index,所以把它改成i === 0
    • 在函数结束时,您使用toString() 将字符重新连接在一起,但这将包括值之间的逗号,而不是使用.join('')

    const createPhoneNumber = (phoneNumber) => {
        const phoneNumberStr = (phoneNumber).toString(); 
        let formattedNumber = [];
        for (let i = 0; i < phoneNumberStr.length; i++) {
            if (i === 0) {
                formattedNumber.push('(')
            }
            if (i === 2) {
                formattedNumber.push(')')
            }
            if (i === 5) {
                formattedNumber.push('-')
            }
            formattedNumber.push(phoneNumberStr[i]);
        }
        return(formattedNumber.join(''));
    };
    
    console.log(createPhoneNumber(1234567890))

    另外,您可以使用.reduce() 来实现相同的目的,它是一个方便的函数,它遍历数组,并将值从一次迭代传递到下一次:

    const createPhoneNumber = (phoneNumber) => 
        (phoneNumber).toString().split('').reduce((acc, char, i) => {
          let pre = ''; 
          if (i == 0) { pre = '('; }
          if (i == 2) { pre = ')'; }
          if (i == 5) { pre = '-'; }
          return `${acc}${pre}${char}`;
        }, '');
    
    console.log(createPhoneNumber(1234567890));

    顺便说一句,我认为您的问题被否决了,因为您没有提供预期的输出或错误的更多详细信息?

    【讨论】:

    • 这很有帮助,非常感谢!我一定会在接下来的版本中包含一个预期的输出。如您所知,仍在学习中!
    猜你喜欢
    • 2021-11-15
    • 2021-06-03
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2019-07-11
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多