我不断收到无法读取属性错误

时间:2018-11-26 03:11:20

标签: javascript

我正在尝试做冒泡的东西。我正在使用此算法对2d数组进行排序,但不断出现错误。这是函数:

print(type(int(input[3])))

错误提示:var array = [ [ "Rober Hill" , 123.54 ], [ "Chrsitopher Reddkin", 54.67 ], [ "Maggie Woods" , 1000.87 ], [ "Jennifer Jones" , 3.34 ], [ "Marcus Parker" , 64.98 ] ]; table = document.getElementById("table"); function bubbleSort(array, length, element) { var swapped = false; do { for (var a = 0; a < 5; a++) // Line 59 { if (array[a][1] > array[a+1][1]) { var temp = array[a][1]; array[a][1] = array[a+1][1]; array[a+1][1] = temp; swapped = true; } } } while(swapped); return array; } 。我在按钮上有此功能。任何帮助都很好!谢谢

2 个答案:

答案 0 :(得分:1)

按原样运行代码,我得到:

Cannot read property '1' of undefined

这是因为在您进行比较时,您尝试比较array[a][1] > array[a+1][1],并且除了最后一个循环(array[a+1]不存在,并且因为它不存在)之外,此方法还有效, 1未定义。

这是一个可行的解决方案,但有一些明显的区别。

  1. 我不知道您为什么将lengthelement作为bubbleSort的参数,但现在它们已经消失了
  2. 您可以只在for循环中使用数组长度,这样,如果您向数组中添加了更多项目,则不必更新经过硬编码的5
  3. for循环中,我从数组长度中减去1,因此我们永远不会尝试将最后一个项目与不存在的项目进行比较。
  4. 此外,我使用i代替a,因为这是增量器的通用变量名。
  5. 我在swapped内定义了do...while,否则您将创建一个无限循环,因为swapped将在第一遍设置为true并停留在{{ 1}}永远。
  6. 您不必返回数组,因为调用true时它会修改原始数组

bubbleSort

答案 1 :(得分:0)

var swapped = false;内移动do {...

还可以将for中的条件更新为a < 4;,或者最好将广义条件用作a < array.length - 1;

var array = [
  ["Rober Hill", 123.54],
  ["Chrsitopher Reddkin", 54.67],
  ["Maggie Woods", 1000.87],
  ["Jennifer Jones", 3.34],
  ["Marcus Parker", 64.98]
];

function bubbleSort(array, length, element) {
  do {
    var swapped = false;
    for (var a = 0; a < array.length - 1; a++) // Line 59
    {
      if (array[a][1] > array[a + 1][1]) {
        var temp = array[a][1];
        array[a][1] = array[a + 1][1];
        array[a + 1][1] = temp;
        swapped = true;
      }
    }
  } while (swapped);

  return array;

}

console.log(bubbleSort(array));