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);
我有一个函数,它只是 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);