微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

排序数组后未定义的属性

如何解决排序数组后未定义的属性

这是我的函数,在我的控制台上我得到了排序数组,我的数组对象上的一个属性是未定义的,并且该属性的值是数组的最后一项。我的问题是该属性是如何创建的,为什么以及一个名为 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;
};

解决方法

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

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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。