我正在尝试使用javascript中的选择排序算法对数组中的对象进行排序

I'm trying to sort the objects in the array using selection sort algorithm in javascript

本文关键字:排序 算法 数组 对象 选择 javascript      更新时间:2023-09-26

下面是我要输出的内容:

[ { name: 'harry', age: '21' },
  { name: 'john', age: '23' },
  { name: 'jack', age: '25' } ]

但是我得到了这个:

[ { name: 'john', age: '23' },
  { name: 'harry', age: '21' },
  { name: 'jack', age: '25' } ]

下面是我的代码:

  var persons = [
  {
  "name": "john",
  "age": "23"
  },
  {
  "name": "harry",
  "age": "21"
  },
  {
  "name": "jack",
  "age": "25"
  }
];
function selectionSortObjects (arr){
  var length = arr.length;
  for(var i = 0; i < length; i++){
    var min = [i].age;
    for(var j = i+1; j < length; j++) {
      if(arr [j].age > arr[min]){
        min = [j].age;
      }
    }
    if (min != i.age) {
      var k = arr[i].age;
      arr[i].age = arr[min];
      arr[min] = k;
    }
  }
  return arr;
}
console.log(selectionSortObjects(persons));
// console.log(persons[0].age);

我做错了什么?因为我没有得到错误,但是我得到了错误的输出。我正在尝试按年龄排序结果做选择排序算法

您要求选择排序方法。这不是它,但将根据所提供的输入为您提供您想要的结果。

persons.sort(function(a, b){return a.age-b.age});

因为persons是一个数组,所以我们可以使用数组sort并传递一个自定义函数来比较数组中每个对象的年龄

我修改了您的selectionSortObjects函数,使其按您的期望工作。以下是新版本:

function selectionSortObjects (arr){
  var length = arr.length;
  for(var i = 0; i < length; i++){
      var min = {
          value: arr[i],
          index: i
      }
    for(var j = i+1; j < length; j++) {
      if(arr[j].age < min.value.age){
        min.value = arr[j];
          min.index = j;
      }
    }
    if (min.value != arr[i]) {
      var k = arr[i];
      arr[i] = min.value;
      arr[min.index] = k;
    }
  }
  return arr;
}

查看JSFiddle的完整源代码