var myobject = [
"A" : {
color: "red",
ordering: "3",
},
"B" : {
color: "green",
ordering: "1",
},
"C" : {
color: "green",
ordering: "2",
}
];
想象一下,我有一个多维对象,如上所述。如果我使用for-in循环迭代这个对象,我可能会按顺序A,B,C得到它们(但这不能保证)。但是,如果我想按照“订购”属性给出的顺序处理它们呢?即使它们以B,C,A的顺序返回。有没有办法在JavaScript中执行此操作(jquery解决方案也很好)。
答案 0 :(得分:3)
首先,您需要确保您的JSON在语法上是正确的。对象使用大括号({
,}
),而非括号([
,]
)。
接下来,您需要将对象转换为元组,以便对它们进行排序。
最后,定义排序功能。提供的一个仅适用于名义上的情况,因此您必须添加自己的逻辑来处理名义上和意外情况。
var myobject = {
"A" : {
color : "red",
ordering : "3",
},
"B" : {
color : "green",
ordering : "1",
},
"C" : {
color : "green",
ordering : "2",
}
};
// Convert object to array of tuples.
function objToTuples(obj) {
return Object.keys(obj).map(function(key) {
return [key, obj[key]];
});
}
// Sorting function to sort tuples by ordering.
function sortByOrdering(a, b) {
var o1 = a[1]['ordering'];
var o2 = b[1]['ordering'];
return o1 > o2 ? 1 : o2 > o1 ? -1 : 0;
}
console.log(JSON.stringify(objToTuples(myobject).sort(sortByOrdering), null, ' '));
[
[
"B",
{
"color": "green",
"ordering": "1"
}
],
[
"C",
{
"color": "green",
"ordering": "2"
}
],
[
"A",
{
"color": "red",
"ordering": "3"
}
]
]