2016-03-03 407 views
1

我需要找出数组中最长的字符串。首先,我将不同的“文本”元素放入我的数组中,因为这些“文本”元素的大小和数量可能因案例而异。 (他们是一个图表的标贴,因此是基于图表的部分产生获取数组中最长字符串的长度

我的代码现在看起来是这样的:。

var textLengthArray = []; 
      domContainer.find(" g > .brm-y-direction > .tick > text").each(function() { 
       textLengthArray.push($(this)); 
      }); 
      var lgth = 0; 
      var longestString; 
      for (var i = 0; i < textLengthArray.length; i++) { 
       if (textLengthArray[i].length > lgth) { 
        var lgth = textLengthArray[i].length; 
        longestString = textLengthArray[i]; 
       } 
      } 

它已经推动所有文本元素融入到我的数组但是当我使用

alert(longestString.length) 

我得到荃“1”的结果。我非常舒尔我有。长度之前的任何地方增加的.text,因为代码不检查死的长度限制:Textlength的textelements。 因为我很新到javascript我会非常感谢一些帮助。

在此先感谢!

+0

我正在运行它,它的工作原理 - 虽然我使用的是硬编码的字符串数组而不是'domContainer.find'这一行。 – millerbr

回答

3

textLengthArray.push($(this));的元素应该是textLengthArray.push($(this).text());否则你的阵列由jQuery的对象。确实jQuerySet具有length属性。在你的情况下,这个集合由1个元素组成。

+0

非常感谢。现在它就像它应该那样工作! – SaltyM

+0

@SaltyM,那么请将此标记为答案,或者如果不是,请修改问题。干杯 – tenbits

1

您在重新分配的值的数组的每个迭代重新声明lgth

var lgth = textLengthArray[i].length替换为lgth = textLengthArray[i].length并且您应该很好。

+0

那么它应该返回0而不是1 –

+0

@ParvSharma你是什么意思?它应该返回数组中最长字符串的长度..? –

+0

变量的初始值 –

1

我不知道你的代码的其余部分,看起来不错。但是你推送一个jQuery对象$(this),而不是一个字符串。第三行应为textLengthArray.push(this);

显然您的推字符串之一是一个有效的jQuery选择用于查找:-)