使用jQuery对JSON对象进行排序

时间:2011-10-16 16:25:43

标签: javascript jquery json

我将以下JSON对象加载到我的应用程序中并存储到名为obj:

的var中
{
    "items" : [
    {
        "name" : "item-1",
        "group" : [
        {
            "groupName" : "name-1",
            "groupPosition" : 2
        },
        {
            "groupName" : "name-2",
            "groupPosition" : 1
        }]
    },
    {
        "name" : "item-2",
        "group" : [
        {
            "groupName" : "name-1",
            "groupPosition" : 1
        },
        {
            "groupName" : "name-2",
            "groupPosition" : 2
        }]
    }]
}

然后我会执行以下操作来完成它:

var groups = new Array();
var items = new Array();
$.each(obj.items, function(i,r){
    var itemName = r.name;
    $.each(r.group, function(index, record){
        if ($.inArray(record.groupName) == -1) {
            groups.push(record.groupName);
            $('body').append('<div id="record.groupName"></div>');
        }
        $('#'+record.groupName).append('<div id="itemName">itemName</div>');
        // At this point I'm stuck as the items get added in order of iteration,
        // not according to their record.groupPosition value.
    });
});

最终将有数百个“项目”包含在未设置数量的“组”中。

我遇到的麻烦是如何使用jQuery或好的ol'JavaScript迭代JSON对象,并在每个组中的正确位置显示项目,因为项目和组不会列在JSON对象中顺序。

非常感谢任何帮助!

谢谢。

3 个答案:

答案 0 :(得分:2)

为什么不直接给组项目提供位置索引:

{
"items" : [
{
    "name" : "item-1",
    "group" : {
    2:{
        "groupName" : "name-1",
        "groupPosition" : 2
    },
    1:{
        "groupName" : "name-2",
        "groupPosition" : 1
    }}

},
{
    "name" : "item-2",
    "group" : {
    1:{
        "groupName" : "name-1",
        "groupPosition" : 1
    },
    2:{
        "groupName" : "name-2",
        "groupPosition" : 2
    }}
}]

}

答案 1 :(得分:0)

假设您有一个分配给它的变量:

var data = ...

您可以使用$.each()方法:

$.each(data.items, function(index, item) {
    // here item.name will contain the name
    // and if you wanted to fetch the groups you could loop through them as well:
    $.each(item.group, function(i, group) {
        // here you can use group.groupName and group.groupPosition
    });
});

javascript中的数组([])基于0索引,并在迭代它们时保留它们的顺序。

答案 2 :(得分:0)

如果我正确地理解了你的问题,那不是它自己的排序,而是如何将它们链接到你的dom节点,解决方案:使用带数字的类。

例如:

$(".group"+items[1].group[0].grouposition").append(items[1].group[0].name);
// this will give append to the element with class="group1"

如果你加入这个生成的html结构以匹配相同的名称,那么它就不会有问题而且你不必对它们进行排序