JavaScript 返回多个字符串,其中 .join() --- 字符串[i].join( " " ) 不起作用



为猪牙家庭作业问题创建解决方案。 成功返回单个单词。 现在要说多个词。

一切都在工作,直到输出两个单独的单词。 尝试使用 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在函数式编程中大放异彩。它几乎建立在职能是一等公民的概念之上的。这就是为什么数组有所有这些花哨的方法,如findmapgrep等等。

所以你应该养成玩语言的习惯。请考虑以下代码:

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功能即可。就像完全摆脱元音数组并首先使用手写(任意复杂(正则表达式一样。

最新更新