我需要找出一个最长的数组字符串。首先,我将不同的“文本”元素推入我的数组中,因为这些“文本”元素的大小和数量可能因情况而异。 (它们是图表的标签,因此是根据图表部分生成的。
我的代码现在看起来像这样:
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很新,我非常感谢一些帮助。
提前致谢!
答案 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)
无需创建单独的数组。只需迭代对象并随时更新:
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;
要从任何数组中获取最长的字符串,请尝试reduce
:
a = ['hello', 'wonderful', 'world']
longest = a.reduce(function(prev, e) {
return prev.length >= e.length ? prev : e;
});
alert(longest)
&#13;
答案 4 :(得分:0)
按长度排序数组并获取第一个元素。希望它适合你
stackoverflow.com/questions/10630766/sort-an-array-based-on-the-length-of-each-element