我是javascript的新手,并且只有一门入门级的Java大学课程。我正在在线上学习JS的课程,但遇到了麻烦。我应该创建一个解析字符串并找到最长单词的函数。 我发现了问题,但不明白为什么以下函数给了我一个未定义的问题。当我尝试加深对语言的理解时,任何帮助都将非常有用。
var statement = 'This is an example string'
//undefined
var result = statement.split(' ').reduce(function(acc, cur) {
if (acc.length > cur.length) {
return acc;
} else {
return cur;
}
});
console.log(result); //"example"
function longest(string) {
string.split(' ').reduce(function(acc, cur) {
if (acc.length > cur.length) {
return acc;
} else {
return cur;
}
});
}
result = longest(statement);
console.log(result); //undefined
答案 0 :(得分:1)
您的函数应该返回一些信息。如果您不“返回” JavaScript中的任何值,它将返回“未定义”
在您的问题中,您的函数有一个reduce方法,该方法将在“最长”函数内返回一个值。但是,“最长”函数应返回该值。这样,当您调用此函数时,该值将可用
function longest(string){
return string.split('').reduce(function(acc,cur){
if (acc.length > cur.length){
return acc;
} else {
return cur;
}
});
}
答案 1 :(得分:0)
需要添加该函数的返回值。
var statement = 'This is an example string'
//undefined
function longest(string) {
var result = string.split(' ').reduce(function(acc, cur) {
if (acc.length > cur.length) {
return acc;
} else {
return cur;
}
});
return result;
}
result = longest(statement);
console.log(result);
答案 2 :(得分:0)
获得相同结果的另一种简单方法是将数组拆分为单词,然后按单词长度的降序依次sort……然后选择第一个元素。
var statement = 'This is an example string'
var result = statement.split(' ').sort((x,y) => y.length - x.length)[0]
console.log(result)
答案 3 :(得分:0)
您没有从函数中返回值。 JavaScript中有一些特殊类型的函数,称为“箭头函数”,可以避免使用return语句。但是,它仅适用于单行语句。 可以在here中找到更多有关箭头功能的信息。
这是我的解决方案的样子:
const statement = 'This is an example string';
const longest = string =>
string.split(' ').reduce((acc, cur) => acc.length > cur.length? acc: cur);
console.log(longest(statement));