首页 > 解决方案 > 在Javascript中传递给函数的数组变量变得未定义

问题描述

抱歉,如果以其他方式询问过这个问题,但我今天缺少我的 google-fu。我今天刚开始学习 Javascript,但在将数组传递给函数时遇到了问题。我正在尝试在每个索引处添加两个数组的值,但是当 sololearn 的代码游乐场尝试在第二个函数中读取 arr1 的长度时,它给了我一个错误:“未捕获的类型错误:无法读取未定义的属性‘长度’” .

我尝试将迭代器更改为“i <=6”,但它告诉我它无法读取“sum [i] ...”行未定义的索引 0 处的属性。我也尝试过用 var 而不是 let 来声明数组。

谁能告诉我为什么数组没有正确传递给函数?

function generateStats(){
    let race = "halfOrc";
    const halfOrc = [2,1,0,0,0,0];
    let stats = [0,0,0,0,0,0];

    switch(race){
        case "halfOrc":
            stats = sumArray(stats,halfOrc);
            break;

    //more code
}

function sumArray(arr1,arr2){
        var sum = [];
        for (let i = 0; i <= arr1.length;) {
            sum[i] = arr1[i] + arr2[i];
            i++;
        return sum
        }
    }

标签: javascriptarraysundefined

解决方案


例如,长度为 2 的数组具有 0 和 1 的有效索引,因此,与 array.length 进行比较时,切勿使用 <= -

你也在 for 循环中返回,所以只有第一次迭代会运行——

快速修复...更改i <=i <移动到return sum}移动i++到 for 循环行。

这是您的代码 - 现在可以使用

function generateStats() {
  let race = "halfOrc";
  const halfOrc = [2, 1, 0, 0, 0, 0];
  let stats = [0, 0, 0, 0, 0, 0];

  switch (race) {
    case "halfOrc":
      stats = sumArray(stats, halfOrc);
      break;

      //more code
  }
  console.log(stats);
}

function sumArray(arr1, arr2) {
  var sum = [];
  for (let i = 0; i < arr1.length; ++i) {
    sum[i] = arr1[i] + arr2[i];
  }
  return sum
}
generateStats();


推荐阅读