[英]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.