通过每个元素中的一个键对JS中的对象进行排序

时间:2018-01-22 05:34:49

标签: javascript arrays sorting

我在JS中有一个对象结构如下:

[{
    "x": 2.31,
    "y": 0.538
}, 
{
    "x": 7.07,
    "y": 0.469
}, 
{
    "x": 6.02,
    "y": 0.469
}, 
{
    "x": 2.18,
    "y": 0.458
}]

我需要按每个元素中的一个键排序(按x排序)。结果如下:

[{
    "x": 2.18,
    "y": 0.458
}, 
{
    "x": 2.31,
    "y": 0.538
}, 
{
    "x": 6.02,
    "y": 0.469
}, 
{
    "x": 7.07,
    "y": 0.469
}]

以下方法不适用于上述结构:

var sorted = [];
for(var key in dict) {
    sorted[sorted.length] = key;
}
sorted.sort();

以下也不是:

function sortObject(o) {
    return Object.keys(o).sort().reduce((r, k) => (r[k] = o[k], r), {});
}

5 个答案:

答案 0 :(得分:1)

实施自定义排序方法。



var arr = [{ "x": 2.31, "y": 0.538 }, { "x": 7.07, "y": 0.469 }, { "x": 6.02, "y": 0.469 }, { "x": 2.18, "y": 0.458 }]
arr.sort((a,b) => a.x - b.x)
console.log(arr);




答案 1 :(得分:0)

你在这里做的是实现一个自定义排序方法,用于比较数组中的元素。

试试这个。

const array = [{
    "x": 2.31,
    "y": 0.538
}, 
{
    "x": 7.07,
    "y": 0.469
}, 
{
    "x": 6.02,
    "y": 0.469
}, 
{
    "x": 2.18,
    "y": 0.458
}];

array.sort((obj1, obj2) => {
   return obj1.x - obj2.x;
});

答案 2 :(得分:0)

是的,您可以使用parseFloat比较密钥的值来对对象的键值进行排序。

var coordinates=[{
    "x": 2.31,
    "y": 0.538
}, 
{
    "x": 7.07,
    "y": 0.469
}, 
{
    "x": 6.02,
    "y": 0.469
}, 
{
    "x": 2.18,
    "y": 0.458
}]

var sortedKey=coordinates.sort(function(a, b) {
    return parseFloat(a.x) - parseFloat(b.x);
});
console.log(sortedKey);

答案 3 :(得分:0)

你可以使用lodash。 https://lodash.com/docs/4.17.4#sortBy

  

lodash 是一个现代化的JavaScript实用程序库,提供模块化,性能和功能。附加功能。

演示:http://jsfiddle.net/e2ccmbhh

let arr = [{
  "x": 2.31,
  "y": 0.538
}, 
{
  "x": 7.07,
  "y": 0.469
}, 
{
  "x": 6.02,
  "y": 0.469
}, 
{
  "x": 2.18,
  "y": 0.458
}]

let sortedArr = _.sortBy(arr, 'x');

答案 4 :(得分:0)

您可以使用Javascript builtin sort()方法来执行此操作。

var myList = [{
            "x": 2.31,
            "y": 0.538
        },
        {
            "x": 7.07,
            "y": 0.469
        },
        {
            "x": 6.02,
            "y": 0.469
        },
        {
            "x": 2.18,
            "y": 0.458
        }];

    var sortedList = myList.sort(function(a, b){
        return a.x - b.x;
    });

    console.log(sortedList);