【问题标题】:Uncaught TypeError: Cannot read property '1' of undefined未捕获的类型错误:无法读取未定义的属性“1”
【发布时间】:2017-09-09 00:09:15
【问题描述】:

我正在处理库存功能,但是,我不断收到错误:未捕获的类型错误:无法读取未定义的属性“1”。我不认为我会超过数组的长度,那么为什么我会得到“属性'1'未定义”。显然我正在尝试读取的内容不存在。我只是看不到它。感谢任何帮助。我使用 console.log 尝试记录错误。但所有内容都返回输出。谢谢

function updateInventory(arr1, arr2) {
        // All inventory must be accounted for or you're fired!
      for(var i = 0; i < arr1.length; i++) {
        //if item found, update
        var index = findItem(arr1[i][1], arr2);
        if(index != undefined) {
          arr1[i][0] += arr2[i][0];
        }
        else {
          arr1.push(arr2[index]);
        }
          
        }
      
      
      //sort arr1
      arr1.sort(function(first, second) {
        return (first[1] > second[1]) ? 1 : -1;
      });
      
        return arr1;
    }
    
    //helper method to search arr2
    function findItem(item, arr2) {
      for(var i = 0; i < arr2.length; i++) {
        if(item === arr2[i][1])
          return i;
      }
      return undefined;
    }
    // Example inventory lists
    var curInv = [
        [21, "Bowling Ball"],
        [2, "Dirty Sock"],
        [1, "Hair Pin"],
        [5, "Microphone"]
    ];
    
    var newInv = [
        [2, "Hair Pin"],
        [3, "Half-Eaten Apple"],
        [67, "Bowling Ball"],
        [7, "Toothpaste"]
    ];
    
    updateInventory(curInv, newInv);

【问题讨论】:

  • 而且该错误可能带有行号
  • 你在很多地方都在使用[1];错误指的是哪个?
  • 这里只是一个注释 - 我建议将事物推送到您正在迭代的数组上,因为它会使事情变得更加复杂!尝试在循环期间构建一个要添加的东西数组,然后在最后全部推送。

标签: javascript arrays function


【解决方案1】:

代码中的else { arr1.push(arr2[index]); } 索引将在此处未定义。这将导致 undefined 被推入 arr1,并且您在同一个数组上运行循环。所以var index = findItem(arr1[i][1], arr2) 会给出你看到的错误。如果你用更新的值更新另一个数组会更好。

function updateInventory(arr1, arr2) {
// All inventory must be accounted for or you're fired!
  for(var i = 0; i < arr1.length; i++) {
//if item found, update
var index = findItem(arr1[i][1], arr2);
if(index != undefined) {
  arr2[index][0] += arr1[i][0];
}else{
  arr2.push(arr1[i]);
}
  }


  //sort arr2
  arr2.sort(function(first, second) {
return (first[1] > second[1]) ? 1 : -1;
  });

return arr2;
}

//helper method to search arr2
function findItem(item, arr2) {
  for(var i = 0; i < arr2.length; i++) {
if(item === arr2[i][1])
  return i;
  }
  return undefined;
}
// Example inventory lists
var curInv = [
[21, "Bowling Ball"],
[2, "Dirty Sock"],
[1, "Hair Pin"],
[5, "Microphone"]
];

var newInv = [
[2, "Hair Pin"],
[3, "Half-Eaten Apple"],
[67, "Bowling Ball"],
[7, "Toothpaste"]
];

console.log(updateInventory(curInv, newInv));

【讨论】:

  • 不,我必须用 arr2 的不同来更新 arr1。需要添加 arr2 中不在 arr1 中的任何项目。如果项目已经存在,则更新数量
猜你喜欢
  • 1970-01-01
  • 2021-12-22
  • 2015-01-06
  • 2017-07-26
  • 2019-02-26
  • 2021-12-25
  • 1970-01-01
相关资源
最近更新 更多