为什么for循环在第一次迭代时停止?

时间:2019-04-15 19:24:46

标签: javascript for-loop

我想使用for循环在数组中找到最长的单词。 但是迭代会在第一遍停止。 我想念什么?

var a = "hello asdf asdf sdfgfghkkjb";
var s = a.split(" ");
var m = -Infinity;
for (var i = 0; i < s.length; i++) {
  if (s[i].length > m) {
    m = s[i];
  }
}
console.log(m)

6 个答案:

答案 0 :(得分:4)

在此if语句中,您将单词的长度与单词本身进行比较:if (s[i].length > m)。更改它以比较两个单词的长度:if (s[i].length > m.length),并将m的初始值设置为可能的最短“单词”,例如var m = ""

var a = "hello asdf asdf sdfgfghkkjb";
var s = a.split(" ");
var m = "";
for (var i = 0; i < s.length; i++) {
  if (s[i].length > m.length) {
    m = s[i];
  }
}
console.log(m)

答案 1 :(得分:2)

要获得预期的结果,请使用以下带有每个单词长度的排序选项

  1. 按空格分隔字符串
  2. 按长度降序排列单词数组
  3. 选择第一个元素以获取最长单词

var a = "hello asdf asdf sdfgfghkkjb";
var s = a.split(" ").sort((a,b) => b.length - a.length)[0]

console.log (s)

codepen-https://codepen.io/nagasai/pen/KYymjd?editors=1010

选项2:使用reduce方法,一次遍历数组并返回最长的单词

var a = "hello asdf asdf sdfgfghkkjb";
var s = a.split(" ").reduce((acc, v) => {
  acc = v.length > acc.length ? v : acc;
  return acc
}, '')

console.log (s)

codepen-https://codepen.io/nagasai/pen/xePrgj?editors=1010

答案 2 :(得分:0)

您正在将单词与数字进行比较:

var s = a.split(" ");
var m = -Infinity; // m is a number
for (var i = 0; i < s.length; i++) {
   if (s[i].length > m) { // in first iteration, true, 5 > -Infinity
      m = s[i]; // in first iteration, m becomes a word
   }
}

...在随后的迭代中,您将获得“ 4> hello”之类的比较。

答案 3 :(得分:0)

因为第一次迭代if(s [i] .length> m)具有m = -infinity。然后在if块内重新分配m的值,因此在下一次迭代中,您要检查s [i] .length是否大于“ hello”

答案 4 :(得分:0)

在迭代中,测试成功,因此您可以这样做:

m = s[i];

等效于:

m = "hello";

在第二次迭代中,您测试:

if (s[i].length > m)

等效于:

if (4 > "hello")

由于您要比较不同类型的对象,因此会将它们转换为通用类型。在这种情况下,它将尝试将字符串转换为数字。由于字符串不是数字,所以将其转换为NaN,并且与NaN的任何比较都将始终返回false

您需要两个变量,一个用于当前的最大长度,另一个用于最长的字符串。

var a = "hello asdf asdf sdfgfghkkjb";
var s = a.split(" ");
var m = -Infinity; // maximum length
var ms; // longest string
for (var i = 0; i < s.length; i++) {
  if (s[i].length > m) {
    ms = s[i];
    m = ms.length;
  }
}
console.log(ms)

答案 5 :(得分:0)

您需要单独的变量来保存最长字符串和当前字符串的长度。

var a = "hello asdf asdf sdfgfghkkjb";
var s = a.split(" ");
var m = -Infinity;
var longest = '';

for (var i = 0; i < s.length; i++) {
  if (s[i].length > m) {
    longest = s[i];
    m = s[i].length;
  }
}
console.log(longest)