Gibt es eine kurze Möglichkeit, die längste Zeichenfolge in einem Zeichenfolgenarray zu finden?
So etwas wie arr.Max(x => x.Length);
?
javascript
Neir0
quelle
quelle
Antworten:
var longest = arr.sort(function (a, b) { return b.length - a.length; })[0];
Wahrscheinlich effizienter, aber erst seit Javascript 1.8 / ECMAScript 5 verfügbar und in älteren Browsern standardmäßig nicht verfügbar:
var longest = arr.reduce(function (a, b) { return a.length > b.length ? a : b; });
quelle
a
undb
definiert sind. Aber ich bin angenehm überrascht, wie elegant die Lösung ist.reduce
mit einer Rückruffunktion verwenden können, die ein Array zurückgibt.reduce
ein Array verwenden und auf dieses reduzieren, indem Sie es mit dem Array verknüpfen, wenn die aktuelle Zeichenfolgenlänge der Länge der akkumulierten Zeichenfolgen entspricht, ein neues Array, wenn es länger ist, oder das vorhandene Array, wenn es kürzer ist (die Implementierung ist etwas lang für ein Kommentar). Funktioniert ohne externe Bibliothek und einzelne Iteration.Eine neue Antwort auf eine alte Frage: In ES6 können Sie kürzer machen:
Math.max(...(x.map(el => el.length)));
quelle
O(n^2)
während die meisten anderen Optionen die Sammlung nur einmal durchlaufenO(n)
. Benutzerdefinierte Komparatoren verwendensort
möglicherweise sogarO(log(n))
Ich würde so etwas tun
var arr = ['first item', 'second item is longer than the third one', 'third longish item']; var lgth = 0; var longest; for(var i=0; i < arr.length; i++){ if(arr[i].length > lgth){ var lgth = arr[i].length; longest = arr[i]; } } alert(longest);
http://jsfiddle.net/jasongennaro/MLqLq/
quelle
function findLongestWord(str) { str = str.split(' '); var longest = 0; for(var i = 0; i < str.length; i++) { if(str[i].length >= longest) { longest = str[i].length; } } return longest; } findLongestWord("The quick brown fox jumped over the lazy dog");
var arr = [ 'fdgdfgdfg', 'gdfgf', 'gdfgdfhawsdgd', 'gdf', 'gdfhdfhjurvweadsd' ]; arr.sort(function (a, b) { return b.length - a.length })[0];
quelle
Verwenden von Array.prototype - (Die Sortierung ähnelt der von @katsPaugh und @deceze geposteten, während ich eine Geige machte.)
DEMO HIER
var arr = [ "2 --", "3 ---", "4 ----", "1 -", "5 -----" ]; Array.prototype.longest=function() { return this.sort( function(a,b) { if (a.length > b.length) return -1; if (a.length < b.length) return 1; return 0 } )[0]; } alert(arr.longest());
quelle
Ich biete einen funktionalen + rekursiven Ansatz. Lesen Sie die Kommentare, um zu verstehen, wie es funktioniert:
const input1 = ['a', 'aa', 'aaa'] const input2 = ['asdf', 'qwer', 'zxcv'] const input3 = ['asdfasdf fdasdf a sd f', ' asdfsdf', 'asdfasdfds', 'asdfsdf', 'asdfsdaf'] const input4 = ['ddd', 'dddddddd', 'dddd', 'ddddd', 'ddd', 'dd', 'd', 'd', 'dddddddddddd'] // Outputs which words has the greater length // greatestWord :: String -> String -> String const greatestWord = x => y => x.length > y.length ? x : y // Recursively outputs the first longest word in a series // longestRec :: String -> [String] -> String const longestRec = longestWord => ([ nextWord, ...words ]) => // ^^^^^^^^^^^^ // Destructuring lets us get the next word, and remaining ones! nextWord // <-- If next word is undefined, then it won't recurse. ? longestRec (greatestWord (nextWord) (longestWord)) (words) : longestWord // Outputs the first longest word in a series // longest :: [String] -> String const longest = longestRec ('') const output1 = longest (input1) const output2 = longest (input2) const output3 = longest (input3) const output4 = longest (input4) console.log ('output1: ', output1) console.log ('output2: ', output2) console.log ('output3: ', output3) console.log ('output4: ', output4)
quelle
Ich sehe die kürzeste Lösung
function findLong(s){ return Math.max.apply(null, s.split(' ').map(w => w.length)); }
quelle
Vielleicht nicht die schnellste, aber sicherlich ziemlich lesbar:
function findLongestWord(array) { var longestWord = ""; array.forEach(function(word) { if(word.length > longestWord.length) { longestWord = word; } }); return longestWord; } var word = findLongestWord(["The","quick","brown", "fox", "jumped", "over", "the", "lazy", "dog"]); console.log(word); // result is "jumped"
Die Array-Funktion forEach wird seit IE9 + unterstützt .
quelle
In ES6 könnte dies mit einem
reduce()
Aufruf zurO(n)
Komplexität erreicht werden, im Gegensatz zu Lösungen,sort()
die Folgendes verwendenO(nlogn)
:const getLongestText = (arr) => arr.reduce( (savedText, text) => (text.length > savedText.length ? text : savedText), '', ); console.log(getLongestText(['word', 'even-longer-word', 'long-word']))
quelle
arr.reduce(function(savedText, text) { return text.length > savedText.length ? text : savedText; }, '');
Ich war von Jasons Funktion inspiriert und habe sie ein wenig verbessert und dadurch einen ziemlich schnellen Finder erhalten:
function timo_longest(a) { var c = 0, d = 0, l = 0, i = a.length; if (i) while (i--) { d = a[i].length; if (d > c) { l = i; c = d; } } return a[l]; } arr=["First", "Second", "Third"]; var longest = timo_longest(arr);
Geschwindigkeitsergebnisse: http://jsperf.com/longest-string-in-array/7
quelle
Ich werde so etwas tun:
function findLongestWord(str) { var array = str.split(" "); var maxLength=array[0].length; for(var i=0; i < array.length; i++ ) { if(array[i].length > maxLength) maxLength = array[i].length} return maxLength;} findLongestWord("What if we try a super-long word such as otorhinolaryngology");
quelle
Wenn Ihre Zeichenfolge bereits in ein Array aufgeteilt ist, benötigen Sie den geteilten Teil nicht.
function findLongestWord(str) { str = str.split(' '); var longest = 0; for(var i = 0; i < str.length; i++) { if(str[i].length >= longest) { longest = str[i].length; } } return longest; } findLongestWord("The quick brown fox jumped over the lazy dog");
quelle
Wenn Sie mehr als ein Maximum erwarten, funktioniert dies:
_.maxBy(Object.entries(_.groupBy(x, y => y.length)), y => parseInt(y[0]))[1]
Es verwendet lodash und gibt ein Array zurück.
quelle
var longest = (arr) => { let sum = 0 arr.map((e) => { sum = e.length > sum ? e.length : sum }) return sum }
es kann Arbeit sein
quelle
function findLongestWord(str) { str = str.split(" "); var sorted = str.sort(function(prev,current){ return prev.length - current.length; }); var index = sorted.length; str = sorted[index-1]; return str; } findLongestWord("The quick brown fox jumped over the lazy dog");
quelle
Mit ES6 unterstützt auch doppelte Zeichenfolge
var allLongestStrings = arrayOfStrings => { let maxLng = Math.max(...arrayOfStrings.map( elem => elem.length)) return arrayOfStrings.filter(elem => elem.length === maxLng) } let arrayOfStrings = ["aba", "aa", "ad", "vcd","aba"] console.log(allLongestStrings(arrayOfStrings))
quelle
Moderne Browser unterstützen eine
for...of
Schleife. Der schnellste und kürzeste Weg, um dieses Problem in Chrome, Safari, Edge und Firefox zu lösen, ist auch der klarste:let largest = ''; for (let item of arr) { if (item.length > largest.length) largest = item }
Im IE können Sie verwenden
Array.forEach
; Das ist immer noch schneller und klarer als das Sortieren oder Reduzieren des Arrays.var largest = ''; arr.forEach(function(item) { if (item.length > largest.length) largest = item });
quelle
Das ist meine einfache Lösung
var arr = ["you", "are", "the", "love", "of", "my", "life"]; var sorted = arr.sort(function (a, b){ return b.length - a.length; }); console.log(sorted[0])
quelle
function allLongestStrings(array) { const newArr=[]; let temp = Math.max(...(array.map(el => el.length))); array.forEach(item => { if(temp == item.length){ newArr.push(item); } }); return newArr; }
quelle
var array = ["hello","falsey","undefined"]; var findLongestWord = function(array){ var longest = array.reduce(function(a,b){ return (a.length > b.length) ? a : b; }); return longest; } findLongestWord(array);
quelle