我是javascript开发的新手,目前正在通过免费代码营和它的挑战/项目进行工作。
我被要求编写一个函数来查找字符串中最长的单词:";那只敏捷的棕色狐狸跳过了那只懒狗;。这是我的代码:
function findLongestWordLength(str) {
let result = 0; // define result value of 0
str.split(" "); // split string into array, separated by spaces
for(let i = 0; i < str.length; i++) { // for loop to iterate through each index of array
let counter = 0; // counter equals 0
counter += str[i].length; // counter equals to itself + length of the ith index in array
if(counter > result) { // if counter is greater than result then result = counter
result = counter;
}
}
return result;
}
我相信有很多比我现在做的更好的方法,我可以简单地寻找一种不同/更好的方法来做这件事并解决问题。但是,我不想忽视这个错误,转而采用不同的方法,我想先从中吸取教训,也许之后我会用不同的方式解决这个问题。我真的很希望有人能给我指出这一点,这样无论我在哪里出错,我都能从错误中吸取教训。
如果有人还想建议其他可能更有效的方法,请告诉我,我渴望学习更多如何解决这些问题的方法:)
我会这样做,在一行中:
const input = "The quick brown fox jumped over the lazy dog";
const longestWord = sentence => sentence.split(" ").map(word => word.length).sort().pop();
console.log(longestWord(input))
说明:
sentence
.split(" ") // [ "The", "quick", "brown" ...... ]
.map(word => word.length) // [ 3, 5, 5, 3, 6, 4, 3, 4, 3]
.sort() // [3, 3, 3, 3, 4, 5, 5, 6]
.pop(); // 6
const string = "this is a test String"
function longestWord(str) {
let arr = str.split(" ")
let result = arr.reduce((acc,val)=> acc.length>val.length?acc:val,"")
console.log(result)
}
longestWord(string)
在您的代码中,您只运行str.split(" ");
,但没有将结果存储回str
在比较中,您必须检查循环中的当前长度是否大于您已经存储在结果中的长度。
如果它更大,则将其设置为新的最大值。
您可以将代码更新为
function findLongestWordLength(str) {
let result = 0; // init current result to 0
const arr = str.split(" "); // store the splitted string in arr as array (naming it str is not clear anymore in the code)
for (let i = 0; i < arr.length; i++) { // loop the arr array
const len = arr[i].length // for every item in the array, get the string length
if (len > result) { // if the string length here is greater than the one in result
result = len; // set result to the new maximum length
}
}
return result; // at the end of the loop, return the maximum
}
console.log(findLongestWordLength("The quick brown fox jumped over the lazy dog"));
你把它搞得太复杂了。无需计算,只需比较字符串的长度并跟踪最长的字符串即可。
var x = "The big brown fox jumped over a bee.";
var arr = x.split(" ");
var biggest = arr[0];
for (i = 1; i < arr.length; i++) {
if (arr[i].length > biggest.length)
biggest = arr[i];
}
console.log(biggest);
split
将字符串放入一个数组中,按长度对元素进行排序,然后从最后一个元素中减去pop
。
function findLongestWordLength(str) {
const arr = str.split(' ');
return arr.sort((a, b) => a.length - b.length).pop();
}
console.log(findLongestWordLength('The quick brown fox jumped over the lazy dog'));
它有两种键入任何代码的方法
初学者可以理解的方式:
function findLongestWordLength(str) {
let result = { 'str_count': 0, 'str_count': '' };
str = str.split(" ");
for (let i = 0; i < str.length; i++) {
if (i + 1 < str.length) {
if (str[i].length > result['str_count']) {
result['longest_str'] = str[i];
result['str_count'] = str[i].length;
}
}
}
return result;
}
console.log(findLongestWordLength("The quick brown fox jumped over the lazy dog"));
和先进的疯狂方式:
var result = { 'str_count': 0, 'longest_str': '' };
'The quick brown fox jumped over the lazy dog'.split(' ').forEach(word => {
result['str_count'] = Math.max(result['str_count'], word.length);
result['longest_str'] = (result['longest_str'].length >= word.length ? result['longest_str'] : word);
console.log(result);
});
执行两种方式:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function findLongestWordLength(str) {
let way_1 = { 'str_count': 0, 'str_count': '' };
str = str.split(" ");
for (let i = 0; i < str.length; i++) {
if (i + 1 < str.length) {
if (str[i].length > way_1['str_count']) {
way_1['longest_str'] = str[i];
way_1['str_count'] = str[i].length;
}
}
}
return way_1;
}
console.log(findLongestWordLength("The quick brown fox jumped over the lazy dog"));
// --------------------------------
var way_2 = { 'str_count': 0, 'longest_str': '' };
'The quick brown fox jumped over the lazy dog'.split(' ').forEach(word => {
way_2['str_count'] = Math.max(way_2['str_count'], word.length);
way_2['longest_str'] = (way_2['longest_str'].length >= word.length ? way_2['longest_str'] : word);
});
console.log(way_2);
</script>
</body>
</html>