【问题标题】:Why doesn't this code log out the appropriate result为什么此代码不注销适当的结果
【发布时间】:2020-08-23 20:19:42
【问题描述】:

我正在尝试在 React 中实现排序可视化器。我有一个按钮,点击时会调用 selectionSort() 函数:

selectionSort() {
    var arr = this.state;
    console.log(arr);
    var n = arr.length;
    var i = 0;
    var j = 0;
    for (i = 0; i < n; ++i) {
      var min = i;
      for (j = i; j < n; ++j) {
        if (arr[min] > arr[j]) {
          min = j;
        }
      }

      var temp = arr[min];
      arr[min] = arr[i];
      arr[i] = temp;
    }
    console.log("new array", arr);
  }

但是,第二个 console.log() 应该给出排序后的数组,对吗?它没有,我无法弄清楚发生了什么。

【问题讨论】:

  • 你会在谷歌上得到排序逻辑。只需在您的代码中使用它
  • 这不是问题,我只需要使用var arr = this.state.array; 而不是var arr = this.state; 无论如何感谢@VishalPawar
  • 您是否要直接在 reactjs 中对 this.state 进行变异?确实不建议这样做,因为this.state 是不可变的,请在排序前尝试复制它。
  • 不要像你一样设置反应状态。您应该始终使用setState 这样做。 reactjs.org/docs/…
  • @HaoWu,我不知道。无论如何,我只是在尝试该算法是否可行。感谢您的意见,会记住的!

标签: javascript html reactjs selection-sort


【解决方案1】:

我认为这里没有问题,我的工作正常。

function selectionSort() {
    var arr = [1,2,4,5,6,3,10,9];
    console.log(arr);
    var n = arr.length;
    var i = 0;
    var j = 0;
    for (i = 0; i < n; ++i) {
      var min = i;
      for (j = i; j < n; ++j) {
        if (arr[min] > arr[j]) {
          min = j;
        }
      }
      var temp = arr[min];
      arr[min] = arr[i];
      arr[i] = temp;
    }
    console.log("new array", arr);
  }

【讨论】:

  • 但是你在这里有一个硬编码的数组,并且 OP 有一个反应状态。如果没有setState,则不应设置 React 状态。
  • 你是对的,但他在 console.log 中循环后获取排序数组时遇到问题。
  • 在分配给 arr 时只需要使用 this.state.array
  • @KarthikRaj 阅读了您问题下的 cmets。这很重要
猜你喜欢
  • 2020-01-25
  • 2013-10-25
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多