无法对通过角度REST调用接收的Javascript对象数组进行排序

时间:2015-06-18 11:18:30

标签: javascript json angularjs

我在排序Javascript对象数组时遇到了一个相当奇怪的问题。 我尝试排序一些虚拟数据,它的工作原理。出于某种原因,如果我通过角度REST调用获得该对象,我就无法对其进行排序。

消息看起来像这样:

{
    "name": "IIB",
    "children": [
        {
            "id": "some_random_id",
            "name": "Broker2",
            "size": 1627,
            "children": []
        },
        {
            "id": "some_random_id",
            "name": "Broker1",
            "size": 203,
            "children": []
        }
     ]
}

我想要做的是根据children属性对第一级name数组进行排序。

我尝试使用sort()方法来执行此操作,但出于某种原因,在这种情况下它不起作用:

       // restangular REST call to get that message as "data"
       INode.one('topology').get().then(function(data) {

            // trying to sort the children array
            data.children = data.children.sort(function(a, b) {
                if (a.name > b.name) {
                    return 1;
                }
                if (a.name < b.name) {
                    return -1;
                }
                return 0;
            })
            console.log(data.children);

        });

现在,如果我运行该代码,我的children数组根本不会受到影响,并且每次都会随机化。我也尝试将引用传递给另一个变量并使用它,但它仍然无法工作。

如果我将实际的JSON对象直接复制并粘贴到源中然后对其进行排序,它就可以工作。

如果我使用jQuery的ajax方法,它也有效:

$.ajax({
    type: "GET",
    url: "same_url_angular_is_using",
    dataType: "json",
    success: function(data) {
        data.children = data.children.sort(function(a, b) {
            if (a.name > b.name) {
                return 1;
            }
            if (a.name < b.name) {
                return -1;
            }
            // a must be equal to b
            return 0;
        });

        console.log(data.children);
    },
    error: function(error) {
        console.error(error);
    }
});

我的猜测是它与angular解析JSON消息的方式有关。

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

使用Angular copy API 并将数据复制到变量并尝试将sort函数应用于新复制的变量。它应该工作。