我正在尝试按发布日期,随机,按字母顺序或按受欢迎程度对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 :(得分:0)
JavaScript有一个数组排序: http://www.w3schools.com/jsref/jsref_sort.asp
没关系,有人向我指出这个链接没有任何相关的例子。不过,我确实认为排序是你正在寻找的。 p>
答案 1 :(得分:0)
小提琴:
https://jsfiddle.net/ppLso0mg/
您通常可以使用someArr.sort()
函数,它具有比较器功能。该功能的工作原理是为您提供a
和b
,您必须确定其顺序。
以下是JSON对象上3种不同属性的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);
答案 2 :(得分:0)
您实际上可以为数组的排序方法指定自己的比较函数。比较器功能应接收2个参数并返回:
使用它,您可以创建自己的临时比较器功能,并使用您自己的标准对数组进行排序。例如,您可以在此处看到一个函数,用于根据其name属性对数组进行排序,另一个函数根据其views属性进行排序:
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。