根据属性从最大到最小对数组中的对象进行排序?

时间:2018-06-21 16:56:02

标签: javascript arrays sorting javascript-objects

我在Javascript中有一个数组,里面有一个对象。我需要根据从最大到最小的属性对它们进行排序。

我找不到不使用无法使用的Array.sort的解决方案。

类似数组的示例:

var arr = [{"name" : "bob", "age", 45}, {"name" : "Joe", "age" : 35}, {"name" : "Amy", "age" : 20}];

我想根据年龄(从大到小)进行排序,而不使用array.sort。

2 个答案:

答案 0 :(得分:2)

考虑到arr对象数组,您可以通过传递任何属性来对arr进行排序。

尝试以下操作:

var arr = [{"name" : "bob", "age": 45}, {"name" : "Joe", "age" : 35}, {"name" : "Amy", "age" : 20}];

function sortArray(arr,prop){
  arr.sort((a,b)=>{
    if(typeof a[prop] ==='string')
      return b[prop].localeCompare(a[prop]);
    return b[prop] - a[prop];
  });
}

//Sort array based on name
sortArray(arr,"name");
console.log(arr);

//Sort array based on age
sortArray(arr,"age");
console.log(arr);

答案 1 :(得分:0)

如果您不想使用sort,则可以通过for循环来实现旧的排序方式。例如,以下是insertion sort降序排列(从最大到最小):

var arr = [{"name" : "Joe", "age" : 35}, {"name" : "Amy", "age" : 20}, {"name" : "bob", "age" : 45}];

function insertionSort (items) {
  var len = items.length;
  for (var i = 1; i < len; i++) {
    var tmp = items[i]; 
    for (var j = i - 1; j >= 0 && (items[j]['age'] > tmp['age']); j--) {
      items[j + 1] = items[j];
    }
    items[j + 1] = tmp;
  }
  arr = arr.reverse();
}

insertionSort(arr);
console.log(arr);