我正在尝试返回数组中最大的元素。对于字符串,这意味着最长的字符串。如何仅返回最大元素的第一个实例。
我的代码:
function getLongestElement(arr) {
var max = "";
var counter = 0;
for (var i = 0; i < arr.length; i++){
if (arr[i].length > counter) max = arr[i]
}
return max;
}
getLongestElement(['one', 'two', 'three', "thre1"]); // "thre1" not "three".
我不太确定这段代码有什么问题。无论最大值是什么,它只返回数组中的最后一个元素。帮助
答案 0 :(得分:2)
counter
初始化为0,但您永远不会更改其值,因此arr[i].length > counter
的if语句始终为true(除非arr[i].length == 0
)。要修复它,您需要跟踪循环内数组的最大元素:
// I renamed counter to maxLength for readability
function getLongestElement(arr) {
var max;
var maxLength = -1;
for (var i = 0; i < arr.length; i++){
if (arr[i].length > maxLength){
maxLength = arr[i].length;
max = i;
}
}
return arr[max];
}
答案 1 :(得分:1)
首先,好的alghoritm不应该做任何假设。这意味着您的max
不应该从“”开始,而是使用第一个数组的元素。您也不会编辑counter
值,这是您的主要问题。但它是多余的,您可以在没有counter
的情况下编写此函数。
function getLongestElement(arr) {
if (arr.length < 1) return /* Some Exception */;
var max = arr[0];
for (var i = 1; i < arr.length; i++) {
if (arr[i].length > max.length) max = arr[i];
}
return max;
}
答案 2 :(得分:1)
您忘了更新counter
function getLongestElement(arr) {
var max = "";
var counter = 0;
for (var i = 0; i < arr.length; i++){
if (arr[i].length > counter) {
max = arr[i];
counter = max.length;
}
}
return max;
}
console.log(getLongestElement(['one', 'two', 'three', "thre1"])); // "thre1" not "three".
答案 3 :(得分:0)
如果您正在寻找实用的解决方案,我建议使用lodash的_.maxBy:
_.maxBy(['one', 'two', 'three', "thre1"], function(str) {
return str.length;
})
如果您正在为学习寻找理论解决方案,
function getLongestElement(arr) {
var max;
var counter = 0;
for (var i = 0; i < arr.length; i++){
if (arr[i].length > counter) max = arr[i]
counter = Math.max(arr[i].length, counter)
}
return max;
}
这里的关键是确保您将counter
变量更新为当前最长的变量。