Node.js 排序是否始终保持项目的时间顺序?
采取: 让数组=[['whatever',3],'1st',1],'2nd',1]] 现在,如果我使用以下方法对其进行排序: array.sorta,b=>a[1]-b[1] 我是否总是以以下方式结束: [['1st',1],'2nd',1],'whatever',3]]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
意思是,值为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);