Node.js 排序是否始终保持项目的时间顺序?

Node.js 排序是否始终保持项目的时间顺序?,node.js,Node.js,采取: 让数组=[['whatever',3],'1st',1],'2nd',1]] 现在,如果我使用以下方法对其进行排序: array.sorta,b=>a[1]-b[1] 我是否总是以以下方式结束: [['1st',1],'2nd',1],'whatever',3]] 意思是,值为1的第一次相遇是否总是保证在第二次相遇之前结束,而第二次相遇本身也会在第三次相遇之前结束等?如果CompareFunction a、b返回0,则a和b彼此保持不变,但根据所有不同的元素进行排序。注意:ECMAscr

采取:

让数组=[['whatever',3],'1st',1],'2nd',1]]

现在,如果我使用以下方法对其进行排序:

array.sorta,b=>a[1]-b[1]

我是否总是以以下方式结束:

[['1st',1],'2nd',1],'whatever',3]]


意思是,值为1的第一次相遇是否总是保证在第二次相遇之前结束,而第二次相遇本身也会在第三次相遇之前结束等?

如果CompareFunction a、b返回0,则a和b彼此保持不变,但根据所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此,并非所有浏览器都遵守这一点

答案是:这取决于您在哪里运行代码


请参见

您所追求的是“稳定”排序,不,Array.prototype.sort不支持此功能。好消息是,ECMAScript 2020即将推出。见导言。即:

其他更新包括要求Array.prototype.sort为稳定排序

至于规范发布后在node.js中实现需要多长时间,我找不到任何相关文档

编辑:更多的好消息

谢谢@d9ngle的提及。这表明从版本7开始,v8引擎支持稳定排序。Node.js在v8上运行。因此,只要您的节点版本足够最新,Array.prototype.sort就会稳定


要查找您正在运行的v8版本,请参阅。

是,数组排序方法始终将遇到的第一个值保留在遇到的第二个值之前

您可以在所有浏览器上运行此代码段


你看到这个了吗?它表示节点在v8v7.0tanks@d9ngle中支持稳定排序。我在答案中添加了这一点。在数据按预期输出和保证数据按预期输出之间有很大的区别。要解决后者,您必须查阅源文档。
var items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'The', value: -12 },
  { name: 'Magnetic', value: 13 },
  { name: 'Zeros', value: 37 },
  { name: 'Sharp', value: 37 },
];

var items1 = [
  ['Edward', 21],
  ['Sharpe', 37],
  ['And', 45],
  ['The', -12],
  ['Magnetic', 13],
  ['Zeros', 37],
  ['Sharp', 37],
];

// sort by value
var sortedArray = items.sort(function (a, b) {
  return a.value - b.value;
});

var sortedArray1 = items1.sort(function (a, b) {
  return a[1] - b[1];
});

console.log(sortedArray);
console.log(sortedArray1);