I'm a newbie to javascript development and am currently working my way through free code camp and it's challenges / projects.
I have been asked to write a function to find the longest word out of a string: "The quick brown fox jumped over the lazy dog". This is my code to do this:
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;
}
I'm sure there are many better ways to do this than the one I am doing, and I could simply search for a different/better way to do it and to get around the problem. But, rather than just ignore the mistake and move to a different method, I want to learn from it first, and then maybe after I will tackle the problem a different way. I would really love if someone could point it out to me so I could learn from the mistake wherever I am going wrong.
If anyone also wants to suggest other, probably more efficient methods of doing this please let me know, I'm eager to learn more methods of how to solve these problems :)
CodePudding user response:
I'd do it this way, in one line :
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))
Explanation :
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
CodePudding user response:
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)
CodePudding user response:
In your code, you only run str.split(" ");
but you are not storing the results back into str
In the comparison, you have to check if the current length in the loop is greater than the one you have already stored in result.
If it is greater, then set it to the new largest value.
You could update the code to
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"));
CodePudding user response:
You're making it too complicated. There's nothing you need to count, just compare the length of the strings and keep track of the longest one.
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);
CodePudding user response:
split
your string into an array, sort the elements by length, and then pop
off the last element.
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'));
CodePudding user response:
It 2 ways to type any code.
The beginner understandable way:
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"));
And the advancer crazy way:
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);
});
Execute the 2 ways :
<!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>