所以我得到一个int
的数组,我应该找到数字最多的那个,但是如果有几个相同的大小(最长的大小),我是返回第一个。
我怀疑我必须对索引做些什么,但我不知道是什么
function findLongest(array){
let arr = array.toString().split(',')
let result = arr.reduce((acc,cur,index) => acc.length > cur.length ? acc : cur)
return parseInt(result)
}
答案 0 :(得分:1)
首先让我们看看reduce
:
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
使用acc.length >= cur.length ? acc : cur
。
如果 acc
的长度更大或相同,请保持acc
其他使用cur
。
var arr = [1, 22, 33, 4444, 5555, 6666, 123, 21];
function findLongest(array){
let arr = array.toString().split(',');
let result = arr.reduce((acc,cur,index) => acc.length >= cur.length ? acc : cur);
console.log(`first matching longest int: ${result}`);
return parseInt(result)
}
findLongest(arr);
由于您的函数使用reduce
,它将循环遍历数组(从左到右)并输出最后一个匹配,您可以使用reduceRight
循环遍历右边的数组(反向顺序)。您将轻松获得第一个匹配的。
(感谢来自评论的@marzelin)
var arr = [1, 22, 33, 4444, 5555, 6666, 123, 21];
function findLongest(array){
let arr = array.toString().split(',');
let result = arr.reduceRight((acc,cur,index) => acc.length > cur.length ? acc : cur);
console.log(`first matching longest int: ${result}`);
return parseInt(result)
}
findLongest(arr);
答案 1 :(得分:0)
尝试以下操作,获取列表中的最大长度,然后迭代,直到找到具有该长度的第一个出现位置:
x = [56, 783, 231, 2, 5213, 382, 232, 1232, 42, 54]
function findLongest(array){
let arr = array.toString().split(',');
let maxLen = Math.max.apply(Math, arr.map(function (el) { return el.length }));
let result = arr.reduce((acc,cur,index) => acc.length == maxLen ? acc : cur);
return parseInt(result);
}
document.write(JSON.stringify(x)+"<br><br>"+findLongest(x))
&#13;