我似乎无法按时间戳对 Javascript 对象进行正确的反向排序。我从这篇 SO 帖子中得到了这个想法 here和这篇文章:here .
问题:
1) object is already sorted on console log for some reason
2) sorting seems to have had no effect
代码:
var map = {1505932515: "some item", 1505932695: "some item", 1505832202: "some item", 1508425777: "some item", 1508872138: "some item", 1509022385: "some item", 1509034662: "some item"}
console.log(map); // Why is this already sorted anyway
var sortedMap = {};
Object.keys(map).sort().reverse().forEach(function(key) {
sortedMap[key] = map[key];
});
console.log(sortedMap);
实时测试:JS Bin
这是在 Google Chrome 上进行的测试。
最佳答案
您的sort
函数,您正在执行的操作是对strings
进行排序,您需要将其转换为数字。然后正如 PHPGlue 所提到的,您的对象不关心插入顺序,它只会执行 native 实现所说的它应该执行的操作。因此,如果您按降序插入,则可能无法返回降序。但是,Map
确实遵守顺序。你可以这样做:
var map = {1505932515: "some item", 1505932695: "some item", 1505832202: "some item", 1508425777: "some item", 1508872138: "some item", 1509022385: "some item", 1509034662: "some item"};
var map = Object.keys(map).sort(function(a,b){ return +b - +a;}).reduce(function(t,k) {
t.set(k,map[k]);
return t;
},new Map());
map.forEach(function(v,k) {
console.log(k,v);
});
sort
函数中的 +
运算符是将字符串转换为数字的简写方式。
关于javascript - 如何按时间戳对javascript对象进行反向排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47171597/