Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对符合特定标准的JSON项进行排序_Javascript_Json - Fatal编程技术网

Javascript 对符合特定标准的JSON项进行排序

Javascript 对符合特定标准的JSON项进行排序,javascript,json,Javascript,Json,我试图按发布日期、随机、字母顺序或流行程度对JSON进行排序。我不确定答案是否在这里,我检查了一下,似乎不知道它是否适合我 我的JavaScript jQuery代码为我获取JSON文件: $.getJSON("js/example.json", function(data) { $.each(data.articles, function() { //code }); }); 我希望JavaScript收集文章中所有项目的数据并对其进行排序。之后,它可能会通过

我试图按发布日期、随机、字母顺序或流行程度对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
        }
    ]
}

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