迭代json对象数组并使用Prototype JS基于键对其进行排序

时间:2014-10-07 19:31:42

标签: javascript arrays json prototypejs

对不起,如果这个问题是重复的,但我不得不问。我正在使用原型JS从文件中读取JSON数据。 JSON数据看起来像这样;

{
    "metaData": {
        "date": "2014-10-06"
    },
    "listOf": [
        {
            "fname": "bill",
            "id": 23
        },
        {
            "fname": "tom",
            "id": 35
        },
        {
            "fname": "jerry",
            "id": 12
        },
        {
            "fname": "batman",
            "id": 68
        },
        {
            "fname": "superman",
            "id": 55
        },
        {
            "fname": "sp-m/super",
            "id": 55
        },
    ]
}

在我的代码中,我需要访问“listOf”键/数组,然后我想遍历每个元素并根据“fname”键对这些元素进行排序。我正在通过ajax请求读取这些数据。以下是该代码;

new Ajax.Request('/file.json', {
                    method:'get',
                    onSuccess: function(transport){
                        var json = transport.responseText.evalJSON();
                        console.log(json);
                    }
                });

现在VAR JSON包含require数据,但我不知道如何访问“listOf”数据并迭代它。

我尝试使用像这样的.each函数;

json.list.each(alert);

但它只打印“object OBJECT”。

请帮我解决一下这个问题。

P.S:请使用原型JS作为答案,但不要使用Jquery。

1 个答案:

答案 0 :(得分:1)

您可以使用其名称访问listOf集合属性:

json.listOf

因此,如果您想对数组进行排序,可以尝试使用.sort() javascript方法:

json.listOf.sort(function(a, b) {
    if (a.fname > b.fname) {
        return 1;
    } else if (a.fname < b.fname) {
        return -1;
    }
    return 0;
});

// At this stage json.listOf will contain the sorted in-place array using the `fname` property

这里有sample jsfiddle说明了这一点。

相关问题