Javascript: Simple Function - Uncaught TypeError: Cannot read property 'length' of undefined

Javascript: Simple Function - Uncaught TypeError: Cannot read property 'length' of undefined

我有一个函数,它只是 returns 给定数组中最长的 属性。

这是一个for循环,将循环的属性赋值给一个变量,属性的长度比变量长

最后 returns 这个新变量。但是我在第 10 行遇到错误,它无法读取未定义的长度。

for循环里面的someArray[i].length好像有问题

function longestString(i) {

      // i will be an array.
      // return the longest string in the array
      var someArray = i;
      console.log(someArray);
      var longestItem = someArray[0];
      console.log(longestItem);
      
      for (i = 0; someArray.length; i++) {
        if (longestItem.length < someArray[i].length) {
          console.log(longestItem);
          console.log(someArray[i]);
          longestItem = someArray[i];
        }
      }

      document.write(longestItem);
      console.log(longestItem);
      return longestItem;
    }

    longestString(['a', 'ab', 'abc']) // should return 'abc'

有什么建议吗?

您的for-loop条件有误。

应该如下所示。

for (i = 0; i < someArray.length; i++)

看看这个 fiddle

这是完整的代码。

function longestString(i) {

  // i will be an array.
  // return the longest string in the array
  var someArray = i;
  document.write(someArray); // just testing
  var longestItem = someArray[0];

  for (i = 0; i < someArray.length; i++) { //Changes in the condition
    if (longestItem.length < someArray[i].length) {
      longestItem = someArray[i];
    }
  }

  document.write(longestItem);
  return longestItem;
}

longestString(['a', 'ab', 'abc']) // should return 'abc'

首先函数参数不要重名i然后在for循环计数器中,你可能会给自己带来很大的麻烦。

第二,你的循环没有你错过的停止条件i<someArray.length,它应该是这样的:

for (i = 0; i<someArray.length; i++) {
    if (longestItem.length < someArray[i].length) {
      console.log(longestItem);
      console.log(someArray[i]);
      longestItem = someArray[i];
    }
  }

最后一件事使用 console.log()console.dir()debug/test 而不是 document.write() 因为 它是非常非常糟糕的做法

您的 for 循环有两个错误:

您正在使用一个 i 函数参数,您将在 for 循环中再次使用该参数。尝试在 for 循环中使用不同的变量名称或至少使用 var 定义变量(以保留范围),否则您将隐藏声明为函数参数的变量。

第二个是您忘记将测试条件包含到循环中。

function longestString(len) {

  // i will be an array.
  // return the longest string in the array
  var someArray = len;
  var longestItem = someArray[0];
  var length = someArray.length;
  
  for (var i = 0 ; i < length; i++) {
    if (longestItem.length < someArray[i].length) {
      longestItem = someArray[i];
    }
  }

  console.log(longestItem);
  return longestItem;
}

longestString(['a', 'ab', 'abc']) // should return 'abc'

也许有不止一个最长的字符串。我建议查看 Array instance iteration methods.

var array = ['a', 'abc', 'ab', 'def'];
var maxlen = Math.max.apply(null, array.map(function(string){
    return string.length;
}));
var longest = array.filter(function(string){
    return string.length === maxlen;
});

var pre = document.createElement('pre');
pre.innerHTML = JSON.stringify(longest);
document.body.appendChild(pre);