【问题标题】:Reordering a JSON list collection in JavaScript在 JavaScript 中重新排序 JSON 列表集合
【发布时间】:2015-10-31 23:33:26
【问题描述】:

我的 javascript 代码中有一个 JSON 对象列表:

var cached4= [];

cached4.push({ Frame: 'frame', TS: 20150809101523723 });
cached4.push({ Frame: 'frame', TS: 20150809101513165 });
cached4.push({ Frame: 'frame', TS: 20150809101514988 });

我现在想按 TS 顺序重新排序这个数组,这样我的结果会是这样的:

20150809101513165 
20150809101514988 
20150809101523723 

现在显然我可以像这样枚举数组:

cached4.forEach(function (entry) {
    cached4.shift();

});

但是有没有 'linqy' 类型的 ding 这个?

【问题讨论】:

  • 嗨,看看 linqjs.codeplex.com> 我认为其中包含您需要的内容。这是我第一次在谷歌上搜索时发现的:)
  • 酷 - 谢谢。看起来不错

标签: javascript arrays json list


【解决方案1】:

你可以使用Array.prototype.sort:

sort() 方法对数组的元素进行就地排序并返回该数组。排序不一定是稳定的。默认排序顺序是根据字符串 Unicode 码位。

var sortedCached4 = cached4.sort(function (a, b) { 
  return a.TS - b.TS;
});

通过TS升序对值进行排序:

[
  {"Frame":"frame","TS":20150809101513165},
  {"Frame":"frame","TS":20150809101514988},
  {"Frame":"frame","TS":20150809101523723}
]

编辑:请注意,您的 TS 大于最安全的整数值 9007199254740991,这意味着它们会丢失精度,请参阅 What is JavaScript's highest integer value that a Number can go to without losing precision? 了解更多信息。

要对其进行测试,请在控制台中输入20150809101513165 并查看结果。

编辑 2:正如 cmets 中所指出的,与 - 相比更好。

【讨论】:

  • 最好使用 var sortedCached4 = cached4.sort(function (a, b) { return a.TS - b.TS; });
  • > 将按字符串排序,使用“-”按数字排序。这在具体情况下可能无关紧要,但对其他人来说可能很有用
  • @CraigStroman 和 simon,你们都是对的。更改了比较,谢谢。
  • 感谢您提供的信息。我提供了较小的数量。干杯:)
  • @AndrewSimpson 如果 TS 表示时间戳,您应该在排序之前将数字解析为日期(您必须使用自己的解析器,因为 new Date(TS) 可能不起作用)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多