获取Array中最长字符串的长度

时间:2016-03-03 13:04:20

标签: javascript arrays

我需要找出一个最长的数组字符串。首先,我将不同的“文本”元素推入我的数组中,因为这些“文本”元素的大小和数量可能因情况而异。 (它们是图表的标签,因此是根据图表部分生成的。

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

 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”。我非常害羞,我必须在.length之前的任何地方添加.text,因为代码不会检查textelements的文本长度。 由于我对javascript很新,我非常感谢一些帮助。

提前致谢!

5 个答案:

答案 0 :(得分:3)

textLengthArray.push($(this));应为textLengthArray.push($(this).text());否则您的数组由jQuery对象组成。实际上jQuerySet具有length属性。在您的情况下,该集合包含1个元素。

答案 1 :(得分:1)

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

var lgth = textLengthArray[i].length替换为lgth = textLengthArray[i].length,您应该做得很好。

答案 2 :(得分:1)

我不知道你的其余代码,看起来很好。但是你正在推送一个jQuery对象read,而不是一个字符串。第三行应为$(this)

显然,你推送的一个字符串是一个找到元素的有效jQuery选择器: - )

答案 3 :(得分:1)

无需创建单独的数组。只需迭代对象并随时更新:

&#13;
&#13;
longest = "";

$('div').each(function() { 
  var t = $(this).text();
  if(t.length > longest.length)
    longest = t;
});

alert(longest)
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div>hello</div>
<div>wonderful</div>
<div>world</div>
&#13;
&#13;
&#13;

要从任何数组中获取最长的字符串,请尝试reduce

&#13;
&#13;
a = ['hello', 'wonderful', 'world']

longest = a.reduce(function(prev, e) {
  return prev.length >= e.length ? prev : e;  
});

alert(longest)
&#13;
&#13;
&#13;

答案 4 :(得分:0)

按长度排序数组并获取第一个元素。希望它适合你

stackoverflow.com/questions/10630766/sort-an-array-based-on-the-length-of-each-element