【发布时间】:2017-06-01 00:21:28
【问题描述】:
我是 JavaScript 新手,100% 通过基于互联网的免费资源自学。 (只是一个介绍,以防我的问题是一个愚蠢的错误)
问题:
给定一个字符串数组,返回另一个包含所有最长字符串的数组。
例子
对于 inputArray = ["aba", "aa", "ad", "vcd", "aba"],输出应该是 allLongestStrings(inputArray) = ["aba", "vcd", "aba"].
我的代码:
function allLongestStrings(inputArray) {
var longest = inputArray.reduce(function (a, b) {
return a.length > b.length ? a : b;
});
for(var i = 0; i < inputArray.length; i++) {
if(inputArray[i].length === longest.length) {
var longArray = [];
longArray.push(inputArray[i]);
}
return longArray;
}
}
错误:
输入:
输入数组:[“aba”,
“啊”,
“广告”,
"光盘",
"aba"]
输出: ["aba"]
预期输出: [“阿巴”, "光盘", "aba"]
输入: 输入数组:[“abc”, “哎呀”, “A B C D”, "dcd"]
输出: 空
预期输出: [“eeee”, "abcd"]
【问题讨论】:
-
longArray应该在循环外声明,否则每次迭代都会重置 -
@AndrewLi 谢谢!我将它移到循环内,但仍然只有一个输出。虽然,第二个错误确实改变了:输入:inputArray:[“abc”,“eeee”,“abcd”,“dcd”]输出:[“eeee”]预期输出:[“eeee”,“abcd”]
-
你也在 for 循环体内部返回。它应该被移到函数声明的底部。
-
总结:声明
var longArray = [];beforefor语句,和return longArrayafter for 循环的右大括号}. -
@StephenP 嗯,我试过了,第一个错误保持不变,但第二个错误现在显示: Input: inputArray: ["abc", "eeee", "abcd", "dcd" ] 输出:[] 预期输出:["eeee", "abcd"]
标签: javascript arrays