如何让我的 'for loop' 到 return 我试图推送的字符?
How do I get my 'for loop' to return the characters I am trying to push?
我目前正在学习 JavaScript 的基础知识,但我意识到我的知识存在一定差距。当这个问题变得更加明显时,我最近开始尝试在 Codewars 上挑战。我最近的努力一直试图让这个 'for loop' 将字符推入数字数组,以便将其格式化为 phone 数字。尽管我尝试过许多不同的解决方案,但其中 none 确实实现了我想要完成的目标。任何帮助弄清楚我在这里哪里出错以及我的逻辑中有什么漏洞的帮助将不胜感激。我最好的尝试是:
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));
一些反馈:
- 您要向数组中插入一项
formattedNumber.push(phoneNumber)
然后循环遍历它,因此只有一次迭代
- 相反,您可以将数字转换为字符串并使用其长度进行迭代
- 检查
formattedNumber[i] === 0
正在将 值 与 0
进行比较(此检查失败,这就是为什么您的函数返回未格式化的 phone number) 但你想比较 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));
顺便说一句,我认为你的问题被否决了,因为你没有提供预期的输出或错误的更多细节
我目前正在学习 JavaScript 的基础知识,但我意识到我的知识存在一定差距。当这个问题变得更加明显时,我最近开始尝试在 Codewars 上挑战。我最近的努力一直试图让这个 'for loop' 将字符推入数字数组,以便将其格式化为 phone 数字。尽管我尝试过许多不同的解决方案,但其中 none 确实实现了我想要完成的目标。任何帮助弄清楚我在这里哪里出错以及我的逻辑中有什么漏洞的帮助将不胜感激。我最好的尝试是:
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));
一些反馈:
- 您要向数组中插入一项
formattedNumber.push(phoneNumber)
然后循环遍历它,因此只有一次迭代 - 相反,您可以将数字转换为字符串并使用其长度进行迭代
- 检查
formattedNumber[i] === 0
正在将 值 与0
进行比较(此检查失败,这就是为什么您的函数返回未格式化的 phone number) 但你想比较 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));
顺便说一句,我认为你的问题被否决了,因为你没有提供预期的输出或错误的更多细节