我有一个对象
const posts = {
"BAhvZrRwcfu":{
"text":"Totally need to try this.",
"user": "heavymetaladam",
vote: 2
},
"BAcyDyQwcXX":{
"text":"Wes. WE should have lunch.",
"user": "jdaveknox",
vote : 3
}
};
有没有一种方法可以根据投票进行排序。如果我把它作为一个对象数组似乎更容易
答案 0 :(得分:0)
我建议转换为对象数组。然后,如果这些标准发生变化,您可以控制排序标准并在将来更轻松地更改它们。
您可以这样做:
var postsList = Object.values(posts)
有关如何/为何起作用的更多详细信息,请参阅此Stackoverflow答案:
有关排序对象数组的详细信息,请参阅有关堆栈溢出的上一个答案,如果您还不知道如何执行此操作:
例如,按投票数排序:
posts.sort(function(a, b) {
return parseInt(a.vote) - parseFloat(b.vote);
});
答案 1 :(得分:0)
您可以使用Object.entries()
const posts = {
"BAhvZrRwcfu": {
"text": "Totally need to try this.",
"user": "heavymetaladam",
"vote": 3
},
"BAcyDyQwcXX": {
"text": "Wes. WE should have lunch.",
"user": "jdaveknox",
"vote": 2
}
};
const sortedPosts = Object.entries(posts)
.sort(([, {vote: a}], [, {vote: b}]) => a < b ? -1 : 1)
.map(([key, prop]) => ({[key]: prop}));
console.log(sortedPosts);
&#13;
或者,您可以在Map
const posts = {
"BAhvZrRwcfu": {
"text": "Totally need to try this.",
"user": "heavymetaladam",
"vote": 3
},
"BAcyDyQwcXX": {
"text": "Wes. WE should have lunch.",
"user": "jdaveknox",
"vote": 2
}
};
const sortedPosts = new Map;
Object.entries(posts)
.sort(([, {vote: a}], [, {vote: b}]) => a < b ? -1 : 1)
.forEach(([key, prop]) => sortedPosts.set(key, prop));
console.log(sortedPosts);
&#13;
答案 2 :(得分:0)
对象本质上是基于密钥的,而不是有序的。要按特定顺序访问它,我发现创建订单列表很有帮助:
var order = [];
$.each(posts, function(key, value) {
order.push([key, value.vote])
}); //use for loop if you prefer
order.sort(function(a,b){
return a[1] - b[1]; //ascending order
})
然后,您可以根据数组posts
的顺序访问order
,例如
order.forEach(function(e){
posts[e[0]];
})