下面是我的代码:
function isEven(num) {;
if (num % 2 === 0) {
return true;}
else {
return false;}
}
function convertToIntegers(lst) {
lst.split(' ');
var len = lst.length;
var count = 0;
while (count < len) {
lst[count] = parseInt(lst[count]);
count++}
}
function iqTest(numbers){
var int_list = convertToIntegers(numbers);
var e_list = [];
var o_list = [];
var count = 0;
var len_int = int_list.length;
while (count < len_int) {
if (isEven(int_list[count]) === true) {
e_list.push(count);}
else if (isEven(count) === false) {
o_list.push(count);}
count++}
if (e_list.length < 2 && e_list.length > 0 && o_list.length > 2) {
return e_list[0];}
else if (o_list.length < 2 && o_list.length > 0 && e_list.length > 2) {
return o_list[0];}
}
每次我运行它,我得到这个错误,说"TypeError:无法读取属性'长度'未定义在iqTest"。有人能告诉我如何解决这个错误吗?我不明白为什么任何对象在我的代码中都是未定义的。我所做的每个变量声明都是完整的。我认为未定义只会出现在没有定义的情况下。
Tomer W和Patrick Evans是对的。修改辅助函数
function convertToIntegers(lst) {
lst = lst.split(' ');
var len = lst.length;
var count = 0;
while (count < len) {
lst[count] = parseInt(lst[count]);
count++;
}
return lst;
}
这样,您将存储拆分的结果,然后在完成后返回数组。
说明这个函数是不需要的。查看内置的数组函数map
这个很简单!
在这些情况下,您需要跟踪该值。
-
您在
var len_int = int_list.length;
行 int_list
的最后赋值在var int_list = convertToIntegers(numbers);
行瞥见
convertToIntegers(numbers)
显示没有return
语句
iqTest()
中使用.length
结论:convert2Integers()
不返回任何值到int_list
然后使用undefined
的int_list.length;
您似乎希望从convert2Integers()
返回lst
function convertToIntegers(lst) {
lst = lst.split(' '); // NOTICE CHANGE, + create a different list!
var len = lst.length;
var count = 0;
while (count < len) {
lst[count] = parseInt(lst[count]);
count++
}
return lst; //THIS LINE was Missing!
}
要扩展@Patrick Evans注释,您需要保存分割的结果,然后将其用于while循环。作为旁注,您知道循环的迭代次数,因此可以使用for循环。
function convertToIntegers(lst) {
//lst.split(' ');
var lst_array = lst.split(' ');
var len = lst_array .length;
var count = 0;
while (count < len) {
lst_array[count] = parseInt(lst_array[count]);
count++}
}
//
//for loop code
//
//for(i=0;i<lst_array.length;i++){
// lst_arry[i] = parseInt(lst_array[i]);
//}