2015-10-14 39 views
2

我試圖按發佈日期,隨機排列,按字母順序或按熱門程度對JSON進行排序。我不確定是否答案在這裏,我查了一下,我似乎無法弄清楚它是否適合我。排序符合某些標準的JSON項目

我的JavaScript jQuery代碼抓住JSON文件對我來說:

$.getJSON("js/example.json", function(data) { 
    $.each(data.articles, function() { 
     //code 
    }); 
}); 

我想JavaScript來從文章中的所有項目收集數據,並對其進行排序。之後,它可能會通過for()或更好的東西添加到HTML中。

這是JSON的樣子。

{ 
    "articles":[ 
     { 
      "name":"aaa", 
      "date":"10/13/15", 
      "views":65 
     }, 
     { 
      "name":"ccc", 
      "date":"10/17/15", 
      "views":175 
     }, 
     { 
      "name":"bbb", 
      "date":"10/11/15", 
      "views":54 
     }, 
     { 
      "name":"ddd", 
      "date":"10/17/15", 
      "views":6 
     } 
    ] 
} 
+0

https://developer.mozilla。org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort – charlietfl

+1

[按值排序JSON](http://stackoverflow.com/questions/881510/sorting-json-by-values) –

+0

按字段排序? – 2015-10-14 04:52:15

回答

0

JavaScript有一個數組排序: http://www.w3schools.com/jsref/jsref_sort.asp

沒關係,它已經向我指出,該鏈接沒有任何相關的例子。儘管如此,我確實認爲你正在尋找什麼。

+0

它不會爲對象工作..鏈接只包含'字符串'數組 –

+0

@SarjanDesai數組排序適用於上面的對象。你是否擔心它是聯想的事實? –

+1

'link'沒有顯示與問題相關的任何具體示例... –

0

小提琴:

https://jsfiddle.net/ppLso0mg/

您通常可以利用someArr.sort()功能,這需要一個比較器功能。該功能的作用是給你ab你必須確定的順序。

以下是3個不同比較器的示例,用於JSON對象上的3個不同屬性。我會讓你用你的想象力,如何將他們聚集成一個大功能。但這應該至少說明它是如何工作的。

var json = 
[ 
{ 
"name": "aaa", 
"date": "10/13/15", 
"views": 65 
}, 
{ 
"name": "ccc", 
"date": "10/17/15", 
"views": 175 
}, 
{ 
"name": "bbb", 
"date": "10/11/15", 
"views": 54 
}, 
{ 
"name": "ddd", 
"date": "10/17/15", 
"views": 6 
} 
]; 

var sortFunctions = 
{ 
    name: function(a, b) 
    { 
     return a.name.localeCompare(b.name); 
    }, 
    date: function(a, b) 
    { 
     if(a.date == b.date) 
     { 
      return 0; 
     } 

     var aDate = new Date(a.date); 
     var bDate = new Date(b.date); 

     return aDate > bDate ? 1 : -1; 
    }, 

    views: function(a, b) 
    { 
     if(a.views == b.views) 
     { 
      return 0; 
     } 

     return a.views > b.views ? 1 : -1; 
    } 
}; 

json.sort(sortFunctions.name); 
console.log(json); 

json.sort(sortFunctions.date); 
console.log(json); 

json.sort(sortFunctions.views); 
console.log(json); 
+0

我想你需要做更多的工作與日期 - 日期字符串是一個跨瀏覽器,國際PITA –

+0

當然。這只是一個簡短的演示。有這樣的圖書館。 ;) – teh1

0

實際上,您可以爲數組的排序方法指定自己的比較函數。比較器功能應接受2個參數和返回:

  • -1,如果第一參數應的排序後的數組中之前去的第二個。
  • 0,如果你認爲兩個參數都是等於(任何一個都可以在之前)。
  • 1,如果第一個參數應該去的第二個參數。

使用它,您可以創建自己的專用比較器函數並使用您自己的標準對數組進行排序。舉個例子,你可以在這裏看到基於其name屬性排序的數組的函數,另一個用於排序基於其觀點屬性:

function compareByName(a, b) { 
    var namea = a.name, nameb = b.name; 
    for(var i = 0; i < namea.length && i < nameb.length; i++) { 
     if(namea.charCodeAt(i) !== nameb.charCodeAt(i)) 
      return namea.charCodeAt(i) - nameb.charCodeAt(i); 
    } 
    return namea.length - nameb.length; 
} 

function compareByViews(a, b) { 
    return a.views - b.views; 
} 

隨着創建的那些功能,幷包含存儲在文章的對象data,你可以這樣排序是:

data.articles.sort(compareByName); //sort by name 
data.articles.sort(compareByViews); //sort by views 

你可以看到一個完整的示例工作here