簡體   English   中英

在javascript中排序json對象

[英]sort json object in javascript

例如,有這個代碼:

var json = {
    "user1" : {
        "id" : 3
    },
    "user2" : {
        "id" : 6
    },
    "user3" : {
        "id" : 1
    }
}

我怎么能把這個json排成這樣 -

var json = {
    "user3" : {
        "id" : 1
    },
    "user1" : {
        "id" : 3
    },
    "user2" : {
        "id" : 6
    }
}

我用ID對用戶進行了排序..
我不知道如何在javascript中執行此操作..

首先,那不是 JSON。 它是一個JavaScript對象文字。 JSON是數據的字符串表示 ,恰好與JavaScript語法非常相似。

其次,你有一個對象。 他們沒有分類。 元素的順序無法保證。 如果您需要保證訂單,則需要使用數組。 這將要求您更改數據結構。

一種選擇可能是使您的數據看起來像這樣:

var json = [{
    "name": "user1",
    "id": 3
}, {
    "name": "user2",
    "id": 6
}, {
    "name": "user3",
    "id": 1
}];

現在你有一個對象數組,我們可以對它進行排序。

json.sort(function(a, b){
    return a.id - b.id;
});

結果數組將如下所示:

[{
    "name": "user3",
    "id" : 1
}, {
    "name": "user1",
    "id" : 3
}, {
    "name": "user2",
    "id" : 6
}];

這是一個簡單的片段,用於對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;
}

它可以使用如下:

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

這將輸出:

{
  a: 0,
  b: 'Fun',
  c: {
    c2: [3, 2, 1, 0],
    c3: null
  }
}

在某些方面,你的問題似乎非常合理,但我仍然可能將其標記為XY problem 我猜最終結果是你想以某種方式顯示排序值? 正如Bergi在評論中所說,你永遠不能完全依賴 Javascript對象( {i_am: "an_object"} )以任何特定的順序顯示它們的屬性。

對於顯示順序,我可能建議您獲取對象的每個鍵(即i_am )並將它們排序為有序數組。 然后,在檢索要顯示的對象的元素時使用該數組。 偽代碼:

var keys = [...]
var sortedKeys = [...]
for (var i = 0; i < sortedKeys.length; i++) {
  var key = sortedKeys[i];
  addObjectToTable(json[key]);
}
if(JSON.stringify(Object.keys(pcOrGroup).sort()) === JSON.stringify(Object.keys(orGroup)).sort())
{
    return true;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM