簡體   English   中英

如何對對象數組進行排序

[英]How to sort array of objects

我需要您的幫助,以了解如何對對象數組與每個對象內的另一個數組進行排序。 我從api收到帶有數組對象數組的響應,如下所示:

[
    {
        "name": "[C US Equity] CITIGROUP INC",
        "stats": [
            {
                "label": "DTD",
                "value": null
            },
            {
                "label": "MTD",
                "value": null
            },
            {
                "label": "YTD",
                "value": 0.0536530913792681
            },
            {
                "label": 2016,
                "value": 0.18102519526139493
            },
            {
                "label": 2015,
                "value": -0.012946569977188238
            },
            {
                "label": 2014,
                "value": null
            }
        ]
    }...
]

我應該按標簽“ YTD”的值(不包含空值)對它進行排序。 歡迎任何幫助

您可以使用array#sort方法

 var oldArray = [{ "name": "[C US Equity] CITIGROUP INC", "stats": [{ "label": "DTD", "value": null }, { "label": "MTD", "value": null }, { "label": "YTD", "value": 0.0536530913792681 }, { "label": 2016, "value": 0.18102519526139493 }, { "label": 2015, "value": -0.012946569977188238 }, { "label": 2014, "value": null } ] }]; oldArray[0].stats.sort(function(a, b) { return a.label - b.label; }) console.log(oldArray) 

您可以使用lodash提供的集合排序方法。 https://lodash.com/docs/4.17.4#sortBy

var users = [{
    "name": "[C US Equity] CITIGROUP INC",
    "stats": [
        {
            "label": "DTD",
            "value": null
        },
        {
            "label": "MTD",
            "value": null
        },
        {
            "label": "YTD",
            "value": 0.0536530913792681
        },
        {
            "label": null,
            "value": 0.18102519526139493
        },
        {
            "label": "2015",
            "value": -0.012946569977188238
        },
        {
            "label": "dtd",
            "value": null
        }
    ]
}]

console.log(_.sortBy(users[0].stats, [function(o) { if(o.label){return  o.label.toUpperCase();} }]));

這也需要空值的情況。

我認為這篇文章可能會對您有所幫助。
看看它,它教您如何比較。

您需要做的就是將JSON內容放入對象數組,然后比較YTD的值(創建兩個for循環,結果[i] .stats [j] .label ==='YTD')以使數組重新排序。

比較功能的工作方式如下(摘自上述鏈接)

function CompareNumbers( v1, v2 ) {
    if ( v1 < v2 ) return -1;  // v1 goes nearer to the top
    if ( v1 > v2 ) return 1;   // v1 goes nearer to the bottom
    return 0;                  // both are the same
}

當它返回-1(或有時為false)時,前一個將被推到數組的前面,而1或true會將前一個推到數組的后面。 並且0(表示不是true或false,或者您可以自己處理異常,后退或前進)將什么都不會發生。

但是請注意,如果數組中存在兩個帶有“ YTD”標記的值,如果發生這種情況,它將使兩個值出現在同一數據中。

當您無法直接從數據庫服務器獲取排序后的數據時,這可能有助於您對數據進行排序。
哦,忘了說了,compare函數可以比較整個對象。(當然,您需要提取類似---> object [index]。['Something your needed']]的對象),不僅是數字。

暫無
暫無

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

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