我在排序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消息的方式有关。
任何人都可以帮我解决这个问题吗?