在javascript中排序json对象

jul*_*ian 31 javascript sorting json

例如,有这个代码:

var json = {
    "user1" : {
        "id" : 3
    },
    "user2" : {
        "id" : 6
    },
    "user3" : {
        "id" : 1
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么能把这个json排成这样 -

var json = {
    "user3" : {
        "id" : 1
    },
    "user1" : {
        "id" : 3
    },
    "user2" : {
        "id" : 6
    }
}
Run Code Online (Sandbox Code Playgroud)

我用ID对用户进行了排序..
我不知道如何在javascript中执行此操作..

Roc*_*mat 77

首先,那不是 JSON.它是一个JavaScript对象文字.JSON是数据的字符串表示,恰好与JavaScript语法非常相似.

其次,你有一个对象.他们没有分类.元素的顺序无法保证.如果您需要保证订单,则需要使用数组.这将要求您更改数据结构.

一种选择可能是使您的数据看起来像这样:

var json = [{
    "name": "user1",
    "id": 3
}, {
    "name": "user2",
    "id": 6
}, {
    "name": "user3",
    "id": 1
}];
Run Code Online (Sandbox Code Playgroud)

现在你有一个对象数组,我们可以对它进行排序.

json.sort(function(a, b){
    return a.id - b.id;
});
Run Code Online (Sandbox Code Playgroud)

结果数组将如下所示:

[{
    "name": "user3",
    "id" : 1
}, {
    "name": "user1",
    "id" : 3
}, {
    "name": "user2",
    "id" : 6
}];
Run Code Online (Sandbox Code Playgroud)

  • 优秀的答案,并做出相反的顺序:`return b.id - a.id;` (3认同)

Vya*_*uta 8

这是一个简单的片段,用于对 Json 的 javascript 表示进行排序。

function isObject(v) {
    return '[object Object]' === Object.prototype.toString.call(v);
};

JSON.sort = function(o) {
if (Array.isArray(o)) {
        return o.sort().map(JSON.sort);
    } else if (isObject(o)) {
        return Object
            .keys(o)
        .sort()
            .reduce(function(a, k) {
                a[k] = JSON.sort(o[k]);

                return a;
            }, {});
    }

    return o;
}
Run Code Online (Sandbox Code Playgroud)

它可以按如下方式使用:

JSON.sort({
    c: {
        c3: null,
        c1: undefined,
        c2: [3, 2, 1, 0],
    },
    a: 0,
    b: 'Fun'
});
Run Code Online (Sandbox Code Playgroud)

这将输出:

{
  a: 0,
  b: 'Fun',
  c: {
    c2: [3, 2, 1, 0],
    c3: null
  }
}
Run Code Online (Sandbox Code Playgroud)