在javascript中对对象的对象进行排序
我有一个目标在javascript中对对象的对象进行排序,javascript,json,sorting,Javascript,Json,Sorting,我有一个目标 const posts = { "BAhvZrRwcfu":{ "text":"Totally need to try this.", "user": "heavymetaladam", vote: 2 }, "BAcyDyQwcXX":{ "text":"Wes. WE should have lunch.", "user": "jdaveknox", vote : 3 } }; 是否有一种方法可以根据投票进行排序。如果我将其设
const posts = {
"BAhvZrRwcfu":{
"text":"Totally need to try this.",
"user": "heavymetaladam",
vote: 2
},
"BAcyDyQwcXX":{
"text":"Wes. WE should have lunch.",
"user": "jdaveknox",
vote : 3
}
};
是否有一种方法可以根据投票进行排序。如果我将其设置为对象数组,似乎会更容易些。我建议将其转换为对象数组。然后,您可以控制排序条件,并在将来这些条件发生变化时更容易地对其进行更改 您可以这样做:
var postsList=Object.values(posts)
有关如何/为什么这样做的更多详细信息,请参见本节:
posts.sort(函数(a,b){
返回parseInt(a.vote)-parseFloat(b.vote);
});代码>我建议转换为对象数组。然后,您可以控制排序条件,并在将来这些条件发生变化时更容易地对其进行更改
您可以这样做:
var postsList=Object.values(posts)
有关如何/为什么这样做的更多详细信息,请参见本节:
如果您还不知道如何进行排序,请参阅上一篇关于堆栈溢出的回答,以了解有关对对象数组排序的详细信息:
例如,要按投票数排序,请执行以下操作:
posts.sort(函数(a,b){
返回parseInt(a.vote)-parseFloat(b.vote);
});代码>您可以使用object.entries()
const posts={
“BAhvZrRwcfu”:{
“文本”:“完全需要尝试一下。”,
“用户”:“heavymetaladam”,
“投票”:3
},
“BAcyDyQwcXX”:{
“文本”:“韦斯,我们应该吃午饭。”,
“用户”:“jdaveknox”,
“投票”:2
}
};
const sortedPosts=Object.entries(posts)
.sort(([,{vote:a}],,{vote:b}])=>a({[key]:prop}));
控制台日志(已分拣邮件)代码>您可以使用object.entries()
const posts={
“BAhvZrRwcfu”:{
“文本”:“完全需要尝试一下。”,
“用户”:“heavymetaladam”,
“投票”:3
},
“BAcyDyQwcXX”:{
“文本”:“韦斯,我们应该吃午饭。”,
“用户”:“jdaveknox”,
“投票”:2
}
};
const sortedPosts=Object.entries(posts)
.sort(([,{vote:a}],,{vote:b}])=>a({[key]:prop}));
控制台日志(已分拣邮件)代码>对象本质上是基于键的,没有顺序。要按特定顺序访问,我发现创建订单列表很有帮助:
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
})
然后,您可以根据数组的顺序访问帖子
,例如
order.forEach(function(e){
posts[e[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
})
然后,您可以根据数组的顺序访问帖子
,例如
order.forEach(function(e){
posts[e[0]];
})
是的,可以尝试一些可能的方法。您能提供您试图解决问题的代码吗?看,它不仅更容易,而且是可排序的。@linux请看下面我的答案。你用钥匙。您需要值。var keys=Object.keys(state.posts);key.sort((a,b)=>{if(a.voteScoreb.voteScore){return 1;}//a.voteScore必须等于b.voteScore return 0;})
如果我把它变成一个对象数组,似乎会更容易些。
是的,你在这一点上是对的,因为对象不是“可排序的”,数组是可以的,有可能的方法可以尝试。您能提供您试图解决问题的代码吗?看,它不仅更容易,而且是可排序的。@linux请看下面我的答案。你用钥匙。您需要值。var keys=Object.keys(state.posts);key.sort((a,b)=>{if(a.voteScoreb.voteScore){return 1;}//a.voteScore必须等于b.voteScore return 0;})
如果我把它变成一个对象数组,似乎会更容易些
-是的,你在这一点上是对的,因为对象不是“可排序的”,数组不在数字上使用parseInt
!我终于找到了一种方法,我先转换成一个对象数组,然后对它进行排序,然后再转换回一个对象对象。不要在数字上使用parseInt
!我终于找到了一种方法,我先转换成一个对象数组,然后对它进行排序,然后再转换回一个object的对象。这个方法有效,但它返回一个object数组,我需要一个object的对象。我这样做是为了转换回object的对象posts={}for(让num在aa中){posts[aa[num].id]=aa[num]}
这可以工作,但它返回一个对象数组,我需要一个对象的对象。我这样做是为了将posts={}(让num在aa中){posts[aa[num].id]=aa[num]}