【问题标题】:Sorting objects in an array based on a property from greatest to least?根据属性从大到小对数组中的对象进行排序?
【发布时间】:2018-12-01 02:25:30
【问题描述】:

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

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

类似数组的一个例子:

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

我想在不使用 array.sort 的情况下根据年龄(从大到小)进行排序。

【问题讨论】:

  • 为什么完全没有使用.sort()?您是否正在做需要您编写自己的排序函数的家庭作业?
  • 不,这是一个使用数组的个人项目。我只是使用 .sort() 得到一个未定义的错误,所以我无法使用它。我只是想找到一个替代@Pointy
  • @arodebaugh 你到底遇到了什么undefined 错误?
  • 您需要检查您的设置...您所拥有的并不是任何东西。你有一个数组的变量,然后其他 2 个数组只是浮动到什么都没有。这应该是一个包含 3 个对象的数组吗?
  • 您需要对数组变量调用排序。所以 arr.sort(function(a, b){return b.age - a.age;})。 Array 是一种类型,而不是实际的数组,因此未定义 sort。你需要对数组类型的东西进行排序,而不是类型本身

标签: javascript arrays sorting javascript-objects


【解决方案1】:

考虑到 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);

【讨论】:

    【解决方案2】:

    如果您不想使用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);

    【讨论】:

    • 谢谢,我现在就试试这个
    • 它正在工作,但它没有保留名称......这应该发生吗?
    • 抱歉,发布的示例有一些问题,我现在正在修复
    猜你喜欢
    • 1970-01-01
    • 2023-02-03
    • 2015-06-17
    • 2019-02-11
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    相关资源
    最近更新 更多