为猪牙家庭作业问题创建解决方案。 成功返回单个单词。 现在要说多个词。
一切都在工作,直到输出两个单独的单词。 尝试使用 join 输出多个单词,但不起作用
尝试输出://返回${splitWords[i].join("")}yay
;
在查看MDN和stackoverflow后碰壁。
function pigLatin(string) {
// Global variables
const vowels = ["a", "e", "i", "o", "u"];
const splitWord = string
.toLowerCase()
.trim()
.split("");
const words = string.split(" ");
// Multiple Words iteration
for (let i = 0; i < words.length; i++) {
const splitWords = words[i]
.toLowerCase()
.trim()
.split("");
console.log(splitWords);
for (let i = 0; i < splitWords.length; i++) {
for (let v = 0; v < vowels.length; v++) {
if (splitWords[i][0] === vowels[v]) {
// return `${splitWords[i].join("")}yay`;
}
}
}
}
预期结果是返回多个连接单词,末尾附加"Yay"。
实际结果是splitWords[i].join("(不是一个函数。
好的,这里的问题是你正在创建一个string
数组并访问它们的一个元素,就好像它是数组一样。在此表达式中splitWords[i].join("")
.试试这个代替return
${splitWords}yay
.
你像一个C程序员一样思考。你现在正在编写JavaScript,所以不要再这样做了。我的意思是想错了。此外,您应该在命名事物上花费更多的精力。名字很重要!非常值得一看 给代码起一个好名字 - 凯夫林亨尼 如果你有一个半小时的空闲时间。
无论如何,回到重点。Javascript在函数式编程中大放异彩。它几乎建立在职能是一等公民的概念之上的。这就是为什么数组有所有这些花哨的方法,如find
、map
和grep
等等。
所以你应该养成玩语言的习惯。请考虑以下代码:
function pigLatin(input) {
const maybe_add_yay = function(word) {
const vowels = ["a", "e", "i", "o", "u"];
const yay_re = new RegExp( vowels.join("|") );
return yay_re.test(word) ? word + 'yay' : word;
};
return input
.toLowerCase()
.trim()
.split(" ")
.map( maybe_add_yay )
.join(" ");
}
console.log( pigLatin("bababa Güllühüllü kptnk giumalo") );
// bababayay Güllühüllü kptnk giumaloyay
这很好地解耦了两个问题(将输入解析为块并处理块(。"收集多个值并连接它们"问题通过使用Array
方法自动解决。
我不确定您实际上想要实现哪些 piglatin 规则,因此此代码只是将 yay 添加到包含其中一个元音的任何单词中,正如您的 OP 似乎表明的那样。
如果您需要其他规则,只需调整maybe_add_yay
功能即可。就像完全摆脱元音数组并首先使用手写(任意复杂(正则表达式一样。