【问题标题】:Undefined property after sorting array排序数组后未定义的属性
【发布时间】:2021-09-08 22:14:15
【问题描述】:

这是我的函数,在我的控制台上我得到了排序后的数组,我的数组对象上有一个属性,它的键是未定义的,属性的值是数组的最后一项。我的问题是该属性是如何创建的,为什么以及一个名为 undefined 的属性是什么意思。

const selectionSort = function (arr) {
  for (let i = 0; i < arr.length; i++) {
    let smallest = arr[i];
    let currentIndex;
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] < smallest) {
        smallest = arr[j];
        currentIndex = j;
      }
      if (j === arr.length - 1) {
        arr[currentIndex] = arr[i];
        arr[i] = smallest;
      }
    }
  }
  return arr;
};

【问题讨论】:

  • 如果if (arr[j] &lt; smallest) 从未成功,您将不会分配currentIndex。然后arr[currentIndex] 将创建一个undefined 密钥。
  • 您好,您知道 undefined 不是属性名称,而是意味着您的变量具有未定义的值
  • 顺便说一句,如果您只在循环的最后一次迭代中做某事,那么您应该在循环完成后 执行此操作,而不是测试循环迭代变量。
  • @NaldDev 如果在currentIndex 未定义的情况下执行arr[currentIndex] = something,它将是一个属性名称。

标签: javascript arrays sorting undefined selection-sort


【解决方案1】:

问题是您在第一个 if 条件内为 currentIndex 赋值,因此在未排序的数组中您使用未分配的变量作为索引。

const selectionSort = function (arr) {
  for (let i = 0; i < arr.length; i++) {
    let smallest = arr[i];
    let currentIndex;
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] < smallest) {
        smallest = arr[j];
        currentIndex = j;
      }
      if (j === arr.length - 1) {
        console.log("currentIndex:", currentIndex);

        arr[currentIndex] = arr[i];
        arr[i] = smallest;
      }
    }
  }
  return arr;
};

let res1 = selectionSort([5,8]);
console.log(res1);

let res2 = selectionSort([5,3]);
console.log(res2);

您正在尝试做的是所谓的冒泡排序,这里是它的代码:

const selectionSort = function (arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] < arr[i]) {
        let tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
      }
    }
  }
  return arr;
};

let res1 = selectionSort([5,8,1,99,45]);
console.log(res1);

let res2 = selectionSort([5,6,7,8]);
console.log(res2);

【讨论】:

    猜你喜欢
    • 2021-09-16
    • 2017-10-27
    • 1970-01-01
    • 2022-12-04
    • 2021-08-26
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 2018-05-03
    相关资源
    最近更新 更多