我似乎无法按时间戳正确反向排序 Javascript 对象。我从这篇 SO post 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 所提到的,您的对象不关心插入顺序,它只会执行本机实现所说的应该执行的操作。因此,如果您按降序插入,则可能不会返回降序。但是,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
是将字符串转换为数字的简写方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句