在javascript中排序对象的对象

时间:2017-10-06 22:06:06

标签: 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

 }
};

有没有一种方法可以根据投票进行排序。如果我把它作为一个对象数组似乎更容易

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;
&#13;
&#13;

或者,您可以在Map

中设置对象

&#13;
&#13;
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;
&#13;
&#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]];
})