【发布时间】:2016-10-16 12:55:10
【问题描述】:
Given 是一个对象 (json) 树,其中不同级别的节点可能包含也可能不包含“排序”属性,如下所示:
...
"Thomas": {
"id": "4",
"sort": "11"
},
"Anna": {
"sort": "10",
"id": "9"
},
"Christa": {
"id": "13",
"sort": "9",
"activity" : {
"book": "9",
"sort": "8",
"read": {
"image": "9",
"sort": "7"
},
"cook": {
"image": "9",
"sort": "6"
}
},
"Peter": {
"fish": "9",
"sort": "5"
}
...
我必须根据“排序”属性单独对所有级别进行排序,并且已经创建了一个工作函数来对单个对象节点进行排序(将对象转换为数组以进行排序,转换回来):
var sortObject = function(inObj) {
var outObj = {}, array = [], item = {};
// transform to array for sorting
array = $.map(inObj, function(value, key) {
if($.type(value) == "object") {
item = { nodename: key };
for(var i in value) {
item[i] = value[i];
}
} else {
item = { [key]: value };
}
return item;
});
array.sort(function(a, b) {
return a.sort - b.sort;
});
// transform back to object
$.each(array, function(key, value) {
if (value.hasOwnProperty("nodename")) {
var item = {};
for(var i in value) {
if (i !== "nodename") {
item[i] = value[i];
}
outObj[value["nodename"]] = item;
}
} else {
for(var i in value) {
outObj[i] = value[i];
}
}
});
return outObj;
};
我不知道如何在整个嵌套对象上应用这个排序函数。非常感谢任何提示或帮助。谢谢。
【问题讨论】:
-
您无法对对象进行排序。您只能使用键和所有级别的键对数组进行排序。
-
您无法对 JavaScript 对象进行排序,因为 property ordering is implementation defined.
-
没有对
Object进行排序这样的事情。你需要对象数组。 -
在呈现的函数中,我首先转换为数组,然后以新的顺序将其转换回来。
-
到目前为止,这是有效的。但是如何将它应用到整棵树上呢?
标签: javascript sorting object tree