2013-11-14 5 views
2

방금 ​​JavaScript를 배우기 시작했습니다. Array에서 가장 긴 단어를 찾아서 인쇄하기 위해 JavaScript를 작성하려고합니다. 아래 코드를 생각해 냈습니다.배열에서 가장 긴 단어/문자열 찾기

var longWords = ["Penelope", "Johny", "Aubumayang", "Czechoslovakia", "Slovenia"] 
var longest = 0; 
for (var i = 0; i < longWords.length; i++) { 
if (longest < longWords[i].length) { 
    longest = longWords[i]; 
    } 
} 

console.log(longest) 

문제는 항상 배열의 첫 번째 요소를 인쇄하는 것입니다. 즉 longest = longWords[0]을 의미합니다. 이제 라인을 longest = longWords[i]으로 변경하면 longest = longWords[i].length으로 가장 길게 늘어납니다. 왜 그것이 작동하지 않는지 그리고 내가 어떻게 for 루프를 사용하여 이것을 할 수 있는지 말해주십시오.

+2

두 단어의 길이가 같고 길이가 가장 긴 유스 케이스를 처리해야합니까? –

답변

3
if (longest < longWords[i].length) { 

아마 당신은 사용자 정의 종류의 문자열 길이를 기반으로 할 수

if (longest.length < longWords[i].length) { 
1
var longest = 0; 

for (var i = 0; i < longWords.length; i++) { 
    if (longWords[i].length > longest.length) { 
     longest = longWords[i]; 
    } 
} 
3

, 그리고 첫 번째 항목 잡아해야 :

longWords.sort(function(a, b) { 
    return b.length - a.length; 
}); 

이은으로 배열을 해제 할 수 다음 :

["Czechoslovakia", "Aubumayang", "Penelope", "Slovenia", "Johny"] 

그 시점에서 첫 번째 항목을 가져올 수 있습니다. 그러나 같은 길이의 첫 번째 문자열 바로 다음에 다른 문자열이있을 수 있습니다.

위 코드의 경우 longest은 숫자로 선언되었지만 나중에 문자열로 설정됩니다. 우리가 관심을 가지는 숫자는 문자열의 길이에서 비롯됩니다. 우리의 조건은 다음과 같아야합니다

// No sense in looking this up twice 
current = longWord[i]; 

if (longest.length < current.length) { 
    longest = current; 
} 
2

은 오히려 가장 긴 단어를 찾는 것보다, 내가 Array.prototype.sort()를 사용하여 요소의 길이를 내림차순으로 배열을 정렬 좋을 것 :

var longWords = ["Penelope", "Johny", "Aubumayang", "Czechoslovakia", "Slovenia"], 
    sorted = longWords.sort(function (a, b) { 
    return a.length < b.length; 
}); 

console.log(sorted); 
// ["Czechoslovakia", "Aubumayang", "Penelope", "Slovenia", "Johny"] 

JS Fiddle demo합니다.

참고 :

1

내가 첫 번째 요소에게 긴 단어 당신 sort 경우 배열을 인쇄하고 인쇄 할 쉽게 수 arr.[0]


var longWords = ["Penelope", "Johny", "Aubumayang", "Czechoslovakia", "Slovenia"]; 
var sorted = longWords.sort((a, b) => b.length - a.length); 

console.log(sorted[0]); 
// "Czechoslovakia" 

가장 긴 요소를 얻을 수있는 또 다른 좋은 방법이있다 및 즉, reduce 방법 :

var longWords = ["Penelope", "Johny", "Aubumayang", "Czechoslovakia", "Slovenia"]; 
 

 
var longest = longWords.reduce(
 
    (a, b) => a.length >= b.length ? a : b 
 
); 
 

 
console.log(longest);

관련 문제