Javascript 对符合特定标准的JSON项进行排序
我试图按发布日期、随机、字母顺序或流行程度对JSON进行排序。我不确定答案是否在这里,我检查了一下,似乎不知道它是否适合我 我的JavaScript jQuery代码为我获取JSON文件:Javascript 对符合特定标准的JSON项进行排序,javascript,json,Javascript,Json,我试图按发布日期、随机、字母顺序或流行程度对JSON进行排序。我不确定答案是否在这里,我检查了一下,似乎不知道它是否适合我 我的JavaScript jQuery代码为我获取JSON文件: $.getJSON("js/example.json", function(data) { $.each(data.articles, function() { //code }); }); 我希望JavaScript收集文章中所有项目的数据并对其进行排序。之后,它可能会通过
$.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
}
]
}
JavaScript具有数组排序: 没关系,有人向我指出,这个链接没有任何相关的例子。不过,我确实认为排序是您需要的。小提琴: 您通常可以使用
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个参数并返回:
- -1,如果排序数组中的第一个参数应在第二个参数之前
- 相等< /强>(任何一个都可以过去)。< /LI>
- 1,如果第一个参数应在第二个参数之后
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;
}
您可以看到一个完整的示例正在运行。它的可能副本对对象无效。.链接只包含
字符串array@SarjanDesai数组排序可以很好地处理上述对象。你担心它是关联的吗?你知道,你是对的。我可以发誓这是我在试图弄明白同样的事情时使用的链接,但事实并非如此。谢谢你指出。我想你需要对日期做更多的工作。日期字符串是一个跨浏览器的,国际性的。这只是一个简短的演示。有专门的图书馆
data.articles.sort(compareByName); //sort by name
data.articles.sort(compareByViews); //sort by views