javascript - 如何按时间戳对javascript对象进行反向排序

标签 javascript arrays sorting ecmascript-6 maps

我似乎无法按时间戳对 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/

相关文章:

javascript - 如何让rex对[]进行替换或拆分?

javascript - 为什么 typeof 的结果与传入的表达式的计算结果不同?

javascript - 基于另一个数组并组合过滤数组

Java统计字符串出现次数并逆序排序

java - 如何按集合中对象的属性对列表进行排序?

java - Stream API - 如果 filter() 紧随其后,sorted() 操作如何工作?

Javascript 使用四舍五入到最接近的 10

javascript - 如何使用特定搜索查询过滤对 json-server 的获取请求?

python - 这两种清除列表的方法有什么区别?

php - 删除数组中的第一级标识符