2017-08-29 127 views
1

我有一個JSON對象的列表。在每個對象中,都有一個unix時間戳字段,這是我想要分類的內容。所以我寫了一個排序功能如何排序像對象列表

function sortUnixTimestamp(a, b){ 
    var a = parseInt(a.timestamp); 
    var b = parseInt(b.timestamp); 
    return ((a > b) ? -1 : ((a < b) ? 1 : 0)); 
} 

由於對象不是數組,我試圖[].sort.call(object).sort(sortUnixTimestamp);但不時我得到[] .sort.call(...)。排序是不是一個函數

我也試圖通過做(object).sort(sortUnixTimestamp);像數組排序,再次,不時我得到(...)。排序是不是一個函數

時間的時間,因爲它的工作原理一半的時間。它爲什麼在某些時候起作用,但並非總是如此?我該如何解決這個問題?

補充: 每個對象看起來像這樣

{ 
    "field1": "string", 
    "field2": "string", 
    "timestamp": 0 
} 

所以名單看起來像

[ 
    { 
     "field1": "string", 
     "field2": "string", 
     "timestamp": 0 
    }, 
    { 
     "field1": "string", 
     "field2": "string", 
     "timestamp": 0 
    }, 
    ... 
] 
+0

自己的原始數據怎麼樣子? – felixmosh

+0

@FelixMosheev查看JSON對象定義的更新問題 – OneMoreQuestion

+0

什麼是'對象'準確?你說這是一個列表。如果它不是一個數組,它來自一個庫嗎? – 4castle

回答

0

如果你的數據是這樣的:

var data = [{ 
 
    timestamp: 3 
 
}, { 
 
    timestamp: 2 
 
}, { 
 
    timestamp: 1 
 
}]; 
 

 
var result = data.sort((item1, item2) => item1.timestamp - item2.timestamp); 
 

 
console.log(result);

您可以使用本地數組的排序功能。

+0

我在這裏不理解的是JSON對象不應該被當作Array對待嗎?此外,爲什麼我的原始排序功能只有一些時間? – OneMoreQuestion

0

如果你的對象是一個數組,你可以通過它們的時間戳值進行排序:

var arrayObj = [ 
    {timestamp: 12}, 
    {timestamp: 10}, 
    {timestamp: 2}, 
    {timestamp: 23} 
]; 

通過調用array.prototype.sort()方法,通過他們的timestamp屬性爲對象的數組排序按照以下:

arrayObj.sort(function (a,b) { 
    return a.timestamp - b.timestamp; 
}); 

這應該輸出:

[ { timestamp: 2 }, 
{ timestamp: 10 }, 
{ timestamp: 12 }, 
{ timestamp: 23 } ]