数组中JavaScript最长的字符串,带有扭曲

时间:2017-05-08 17:16:07

标签: javascript arrays

所以我得到一个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)
}

2 个答案:

答案 0 :(得分:1)

首先让我们看看reduce

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

选项1:

使用acc.length >= cur.length ? acc : cur

  1. acc(目前最长的int)
  2. cur(currentIndex)
  3. 如果 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);

    选项2:

    由于您的函数使用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;
&#13;
&#13;