如何在 Javascript 中按 prev 对象 id 对对象数组进行排序
How to sort array of objects by prev object id in Javascript
我有这样的结构:
[
{id: 1, afterId: -1},
{id: 5, afterId: 2},
{id: 2, afterId: 4},
{id: 4, afterId: 1},
{id: 3, afterId: 5}
]
编辑
要求:
- 每个对象的 afterId 必须等于前一个对象 id 键;
- 后 ID = -1 的对象必须是第一个;
- 即使 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/
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在Javascript中转换对象数组
- 在JavaScript中通过索引从对象数组中获取值
- Backbone虹吸以获取对象数组
- 如何在DataTables 2.1中迭代对象数组
- Javascript-根据赋值顺序,按键合并对象数组
- 将事件附加到对象/数组
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript在数组中获取对象数组中键的所有不同值
- 在对象数组中查找多个值的d3范围
- Undercore.js获取对象数组中键对象的值
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 如何通过json对象数组为嵌套对象赋值
- 如何循环通过2个对象数组并通过匹配id进行合并
- 为对象数组创建列表项
- 如何使用javascript合并两个对象数组
- JSON到对象数组,并向每个对象添加项
- JavaScript:从对象数组中获取唯一值及其计数
- 按不同项目对对象数组进行排序