如何在 Javascript 中按 prev 对象 id 对对象数组进行排序

How to sort array of objects by prev object id in Javascript

本文关键字:对象 数组 排序 id Javascript 中按 prev      更新时间:2023-09-26

我有这样的结构:

[
  {id: 1, afterId: -1},
  {id: 5, afterId: 2},
  {id: 2, afterId: 4},
  {id: 4, afterId: 1},
  {id: 3, afterId: 5}
]

编辑

要求

  1. 每个对象的 afterId 必须等于前一个对象 id 键;
  2. 后 ID = -1 的对象必须是第一个;
  3. 即使 id 之后有重复或缺失,也应该工作;

预期成果

[
  {id: 1, afterId: -1},
  {id: 4, afterId: 1},
  {id: 2, afterId: 4},
  {id: 5, afterId: 2},
  {id: 3, afterId: 5}
]

例:http://jsfiddle.net/z3sfdo1z/

这是一个使用 for 循环的解决方案。

var newList = [];
var afterId = -1;
for (var i = 0; i < list.length; i++) {
  var item;
  for (var j = 0; j < list.length; j++) {
    if (list[j].afterId === afterId) {
      item = list[j];
      break;
    }
  }
  afterId = item.id;
  newList.push(item);
}

http://jsfiddle.net/z3sfdo1z/1/

从 -1 开始,循环浏览列表以按顺序放置每个项目,直到放置完所有项目。请注意,如果数组缺少特定的 afterId,此操作将失败。

这是一个似乎基于您开始的工作的解决方案:

list.sort(function(a,b){
     if (a.afterId == -1 || b.afterId == a.id) {
     return -1;
     }
     if (b.afterId == -1 || a.afterId == b.id) {
     return 1;
     }
      return 0;
    });

http://jsfiddle.net/Mouradif/fv9wLz3c/3/