我想从字符串中找到长度最大的所有单词。
目前,结果仅是长度最大的第一个:'jumped1'
,而我希望它们全部为:['jumped1', 'jumped2']
。
我该如何调整以下内容?
function test(str) {
var newStr = str.split(' ');
var nu = 0;
var word =null;
for(var i=0; i < newStr.length; i++){
if(newStr[i].length > nu){
nu = newStr[i].length; // length
word = newStr[i]; // word
}
}
return word;
}
console.log(test("The quick brown fox jumped1 over the lazy dog - jumped2"));
答案 0 :(得分:3)
找到最长的单词时,不要将其分配给变量word
,而是将其推送到最长的单词数组中。找到新的最长单词时,您必须处理数组的空白。
function test(str) {
var split_string = str.split(' ');
var longest_length = 0;
var words = [];
for(let string of split_string){
if(string.length > longest_length){
words = [string];
longest_length = string.length;
} else if (string.length == longest_length){
words.push(string);
}
}
return words;
}
console.log(test("The quick brown fox jumped1 over the lazy dog - jumped2"));
答案 1 :(得分:2)
您可以使用reduce
获取最长单词的长度,然后使用filter
获取该长度的单词列表:
function test(str) {
var words = str.split(' ');
var maxLen = words.reduce(function(num, word){
return Math.max(num, word.length);
}, 0);
return words.filter(function(word){
return word.length == maxLen
});
}
console.log(test("The quick brown fox jumped1 over the lazy dog - jumped2"));
答案 2 :(得分:0)
如果我对问题的理解正确,则可以在找到最大长度后使用filter
,以便返回包含length === max
的每个单词的数组
function test (str) {
let words = str.split(' ')
let max = 0
words.forEach(word => {
if (word.length > max) max = word.length
})
return words.filter(word => word.length === max)
}
console.log(
test("The quick brown fox jumped1 over the lazy dog - jumped2")
)
答案 3 :(得分:0)
您可以通过收集更长的单词或相同长度来减少数组。
function test(string) {
return string
.split(' ')
.reduce((r, w) => {
if (!r || r[0].length < w.length) {
return [w];
}
if (r[0].length === w.length) {
r.push(w);
}
return r;
}, undefined);
}
console.log(test("The quick brown fox jumped1 over the lazy dog - jumped2"));