javascript - 在Javascript中有效地对链表进行排序?
问题描述
在 Javascript/NodeJS 中对链表进行排序的最有效方法是什么?如果我有一个对象数组,其中一个id
和comesAfter
引用id
列表中前一项的,我怎样才能把它按顺序排列?
解决方案中的 ES6 功能很好用。它不应该修改原始数组,而是返回一个新数组。(但是,如果不难展示如何在适当的位置进行操作,那也有助于了解。)
// before sorting
[
{ id: "three", comesAfter: "two" },
{ id: "one", comesAfter: null },
{ id: "four", comesAfter: "three" },
{ id: "two", comesAfter: "one" },
]
// after sorting
[
{ id: "one", comesAfter: null },
{ id: "two", comesAfter: "one" },
{ id: "three", comesAfter: "two" },
{ id: "four", comesAfter: "three" },
]
解决方案
创建一个对象似乎是合理的,如下所示:
var obj = {};
for (var i = 0; i < input.length; i++) {
obj[input[i].comesAfter] = input[i];
}
现在,让我们生成输出:
var index = 0;
var output = [obj.null];
while (++index < input.length) {
output[index] = obj[output[index - 1].id];
}
推荐阅读
- wmi - 如何正确查询 WMI 对象
- vue.js - Vuetify 2.0.5 上的 v-data-table 如何禁用移动屏幕上表头的更改?
- r - 加速 gganimate 渲染
- android - 我无法使用 react-native-image-crop-picker 构建 android 应用程序
- lua - 如何使用 Wireshark 翻译 Lua 脚本中的“\r\n”字符串
- performance-testing - NVReportExt.dll:系统异常:EXCEPTION_ACCESS_VIOLATION
- android - 'tools:replace="android:allowBackup"' 到
元素 - javascript - 有没有办法让代码更简单高效?
- android - 为什么当 FAB 在 LinearLayout 时可点击被禁用
- boost - Boost Spirit x3:解析分隔字符串