按对象键值对javascript中的数组进行排序


73

您将如何根据距离对带有这些对象的数组进行排序。这样您就可以将对象从最小距离到最大距离进行排序?

Object { distance=3388, duration="6 mins", from="Lenchen Ave, Centurion 0046, South Africa", more...}

Object { distance=13564, duration="12 mins", from="Lenchen Ave, Centurion 0046, South Africa", more...}

Object { distance=4046, duration="6 mins", from="Lenchen Ave, Centurion 0046, South Africa", more...}

Object { distance=11970, duration="17 mins", from="Lenchen Ave, Centurion 0046, South Africa", more...}

Answers:


141

使用Arraysort()方法,例如

myArray.sort(function(a, b) {
    return a.distance - b.distance;
});

+1,但这实际上不是Array构造函数的属性。
pimvdb 2011年

@pimvdb仅用于说明它是的方法Array。现在好点了?
菲尔(Phil)

1
谢谢,那很好,很简单,我有一个更长的方法来做同样的事情。
哈利

15

这与当前的最佳答案相同,但使用ES6一线式:

myArray.sort((a, b) => a.distance - b.distance);


9

这是一个带有可接受答案的示例:

 a = [{name:"alex"},{name:"clex"},{name:"blex"}];

对于升序:

a.sort((a,b)=> (a.name > b.name ? 1 : -1))

输出: [{name: "alex"}, {name: "blex"},{name: "clex"} ]

对于下降:

a.sort((a,b)=> (a.name < b.name ? 1 : -1))

输出: [{name: "clex"}, {name: "blex"}, {name: "alex"}]


5

这对我有用

var files=data.Contents;
          files = files.sort(function(a,b){
        return a.LastModified - b. LastModified;
      });

或使用Lodash对数组进行排序

files = _.orderBy(files,'LastModified','asc');

3

与已经给出的答案没有什么不同,但是更通用的是:

sortArrayOfObjects = (arr, key) => {
    return arr.sort((a, b) => {
        return a[key] - b[key];
    });
};

sortArrayOfObjects(yourArray, "distance");

可以用一个班轮退货声明写成:sortArrayOfObjects = (arr, key) => { return arr.sort((a, b) => a[key] - b[key]); };
user10971804 '20

0

这是为您提供的另一种方式:

your_array.sort((a, b) => a.distance === b.distance ? 0 : a.distance > b.distance || -1);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.