在我的Angular4应用中,我希望通过子键(在本例中为obj
)对对象(order
)进行排序,如下所示:
var obj = {
signal_a : {
order : 2,
signals : []
},
signal_b : {
order : 3,
signals : []
},
signal_c : {
order : 1,
signals : []
}
}
目前显示:
1. signal_a
2. signal_b
3. signal_c
通缉结果:
1. signal_c
2. signal_a
3. signal_b
答案 0 :(得分:0)
您可以使用Object.keys
获取对象属性数组并通过查看其order
对其进行排序,并根据此新订单重新创建新对象来实现此目的。
警告强> 正如这里解释的那样:Does JavaScript Guarantee Object Property Order? JS无法保证对象属性的顺序。您必须将对象转换为数组。或者使用地图。
var obj = {
signal_a : {
order : 2,
signals : []
},
signal_b : {
order : 3,
signals : []
},
signal_c : {
order : 1,
signals : []
}
};
var orderedObj = {};
Object.keys(obj).sort((a,b) => obj[a].order > obj[b].order ? 1 : -1).forEach(prop => orderedObj[prop] = obj[prop]);
console.log(orderedObj);

对象到数组:
var obj = {
signal_a : {
order : 2,
signals : []
},
signal_b : {
order : 3,
signals : []
},
signal_c : {
order : 1,
signals : []
}
};
var objToArray = Object.keys(obj).sort((a,b) => obj[a].order > obj[b].order ? 1 : -1).map(key => {
return {
"key":key,
"value":obj[key]
};
});
console.log(objToArray);