在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]}