对符合某些标准的JSON项进行排序

时间:2015-10-14 04:32:19

标签: javascript 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
        }
    ]
}

3 个答案:

答案 0 :(得分:0)

JavaScript有一个数组排序: http://www.w3schools.com/jsref/jsref_sort.asp

没关系,有人向我指出这个链接没有任何相关的例子。不过,我确实认为排序是你正在寻找的。

答案 1 :(得分:0)

小提琴:

https://jsfiddle.net/ppLso0mg/

您通常可以使用someArr.sort()函数,它具有比较器功能。该功能的工作原理是为您提供ab,您必须确定其顺序。

以下是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个参数并返回:

  • -1,如果第一个参数应该在之前排序数组中的第二个参数。
  • 0,如果你认为两个参数都是相等(任何一个都可以在之前)。
  • 1,如果第一个参数应<=>> 第二个参数。

使用它,您可以创建自己的临时比较器功能,并使用您自己的标准对数组进行排序。例如,您可以在此处看到一个函数,用于根据其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