返回数组中最长的字符串(JavaScript)

时间:2017-09-08 23:36:52

标签: javascript arrays string for-loop

所以我试图在字符串数组中找到最长的字符串。在我必须返回最长字符串的长度之前,我已经完成了与此类似的问题。问题是,我的代码工作并返回11,如下所示:

var long1= 0;

var plorp = ["bbllkw", "oox", "ejjuyyy", "plmiis", "xxxzgpsssa", "xxwwkktt", "znnnnfqknaz", "qqquuhii", "dvvvwz"];

function longestString(arr){
  for (i=0; i<arr.length; i++){
      if (arr[i].length > long1){
        long1= arr[i].length;
      }

  }
  return long1;
}

但是,如果我将long1= arr[i].length;更改为long1 = arr[i];,则只返回arr[0]。我在这里错过了什么吗?否则循环似乎正在迭代。

编辑:也就是说,它返回bbllkw

7 个答案:

答案 0 :(得分:8)

您可以改为使用class FotoDelete(LoginRequiredMixin, DeleteView): model = Foto def get_success_url(self): fotoid = self.kwargs['pk'] foto = get_object_or_404(Foto, id=fotoid) album_id = foto.albumnr.pk return reverse_lazy('albumbum:detail', kwargs={'pk': album_id})

&#13;
&#13;
reduce
&#13;
&#13;
&#13;

或ES6版本:

&#13;
&#13;
var plorp = ["bbllkw", "oox", "ejjuyyy", "plmiis", "xxxzgpsssa", "xxwwkktt", "znnnnfqknaz", "qqquuhii", "dvvvwz"];
var longest = plorp.reduce(function(a, b) { 
  return a.length > b.length ? a : b
}, '');
console.log(longest);
&#13;
&#13;
&#13;

答案 1 :(得分:3)

您必须将长声明更改为:

var long1= '';

并且在for循环条件中它应该是

arr[i].length > long1.length

答案 2 :(得分:2)

在用户需要更基本的解决方案后更新

在这里,我们找到具有reduce函数的数组项的最长长度,然后使用具有filter函数的长度的元素过滤数组。如果它们具有相同但长度最长的

,它会返回多个元素
var plorp = ['sameLength', 'someoth', 'asfzc', 'sameLLngth'];
    ln = plorp.reduce((r,s) => r > s.length ? r : s.length, 0);


const result = plorp.filter(pl => pl.length == ln);

console.log(result);

旧答案

如果数组中有 多个 最长的字符串,它将返回一个数组。如果只有一个最长,它将返回字符串,而不是数组。

var plorp = ["bbllkw", "oox", "ejjuyyy", "plmiis", "xxxzgpsssa", "xxwwkktt", "znnnnfqknaz", "qqquuhii", "dvvvwz"];
var wholeArr = [];

function longestString(arr) {
    var tlength = 0;
    for(var i =0; i < plorp.length; i++){
      if(tlength < plorp[i].length){
        tlength = plorp[i].length;
      }
    }
    for(var j =0; j < plorp.length; j++){
      if(plorp[j].length == tlength){
         wholeArr.push(plorp[j]);
      }
    }
   if(wholeArr.length == 1){
     return wholeArr[0]
   }else{
      return wholeArr
  }
}


console.log(longestString(plorp));

答案 3 :(得分:1)

  

var arr = [“first”,“second”,“third”,“fourth”,“thousand”]

     

function getLongestString(arr)   {      let longestStringArr = arr.sort((a,b)=&gt; a.length - b.length).reverse();      return longestStringArr [0];   }

     

console.log(getLongestString(arr))

答案 4 :(得分:0)

只需比较字符串的长度,然后将字符串本身分配给long1。

var plorp = ["bbllkw", "oox", "ejjuyyy", "plmiis", "xxxzgpsssa", "xxwwkktt", "znnnnfqknaz", "qqquuhii", "dvvvwz"];

function longestString(arr) {
  var long1 = arr[0];
  for (i = 0; i < arr.length; i++) {
    if (arr[i].length > long1.length) {
      long1 = arr[i];
    }
  }
  return long1;
}


console.log(longestString(plorp));

答案 5 :(得分:0)

问题在于您设置

long1=arr[i];

并与长度进行比较,即整数值。

在第一次迭代时,您将0的整数值与第一个字符串的长度进行比较,这当然使得比较表达式结果为true并且您设置了

 long1=arr[0];

对于下一次迭代,long1不再包含整数值而是字符串,因此长度与long1之间的比较始终返回false。

这就是为什么你总是得到第一个字符串作为结果。

您需要将long1初始化为空字符串,然后根据belhadj的回答建议使用long1.length进行比较。

答案 6 :(得分:0)

另一种解决方案涉及阵列的sort方法和比较功能,但这可能是一个重的&#34;根据{{​​3}}的解决方案:

  

根据compareFunction的性质,这可能会产生很高的影响   高架。 compareFunction做的工作越多,元素就越多   有分类,可以考虑使用地图更明智   排序

因此,采用上述建议,这是使用地图和数组排序方法获取最长字符串的一种方法,如下所示:

&#13;
&#13;
var plorp = ["bbllkw", "oox", "ejjuyyy", "plmiis",
             "xxxzgpsssa", "xxwwkktt", "znnnnfqknaz",
             "qqquuhii", "dvvvwz"];

function getLongestStr() {
  var mapped = plorp.map((el, i) => ({ index: i, length: el }) );
  mapped.sort((a, b) => {

      if (a.length > b.length) {
        return -1;
      }
   
      if (a.length < b.length) {
        return 1;
      }
      return 0;
  });

// DESC order so longest string in 0th element
  return mapped.map((el) => plorp[el.index])[0];
}
console.log( getLongestStr() );
&#13;
&#13;
&#13;

有趣的相关讨论MDN