【问题标题】:Swapping 2 elements of 2D array交换二维数组的 2 个元素
【发布时间】:2020-11-06 18:24:55
【问题描述】:

我无法根据列值对数组进行排序。我有一个二维数组:

var cl12 =  [[9, 10.5], [10, 11.5], [12, 13.5], [12.5, 14.5], [14.5, 15], [16, 18], [16, 17]]

现在你可以在上面的数组中看到,最后一个和倒数第二个元素对于第 0 个索引具有相同的值,但是它们不是基于列排序的,因为 [16,18] 应该在 [16,17] 之后...现在我写了一个如下的for循环来得到一个完整的排序数组,

 for(i=0;i<cl12.length;i++){
      if((cl12[i][0]==cl12[i+1][0]) && (cl12[i][1]>cl12[i+1][1])){
         var temp = cl12[i+1];
         cl12[i+1]=cl12[i];
         cl12[i] = temp ;
         }
       }  
     console.log(cl12)

但它在控制台上给出错误:未捕获的类型错误:无法读取未定义的属性“0”

【问题讨论】:

  • cl12[i + 1] 在 i == cl12.length - 1 时尝试读取数组末尾

标签: javascript arrays algorithm sorting 2d


【解决方案1】:

您将每个元素与索引大一的元素进行比较,因此您应该只循环比数组长度小一。

for(i=0;i<cl12.length-1;i++){

var cl12 =  [[9, 10.5], [10, 11.5], [12, 13.5], [12.5, 14.5], [14.5, 15], [16, 18], [16, 17]]
for(i=0;i<cl12.length-1;i++){
  if((cl12[i][0]==cl12[i+1][0]) && (cl12[i][1]>cl12[i+1][1])){
    var temp = cl12[i+1];
    cl12[i+1]=cl12[i];
    cl12[i] = temp ;
  }
}  
console.log(cl12)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多