我的JSON数组
var jData = [
{id: 1, parent: null},
{id: 2, parent: null},
{id: 3, parent: 1},
{id: 4, parent: 2},
{id: 5, parent: 2},
{id: 6, parent: 1}];
我希望它按如下方式排序(先按ID,然后按父项)
[
{id: 1, parent: null},
{id: 3, parent: 1},
{id: 6, parent: 1}
{id: 2, parent: null},
{id: 4, parent: 2},
{id: 5, parent: 2},
];
在JavaScript中执行此操作的最佳方法是什么?
我试过了,但没成功
jData .sort((a, b) => a.id - b.id ||a.parent- b.parent);
救命啊!
3条答案
按热度按时间7fyelxc51#
首先需要一个topological sorting,然后按出现的顺序获取节点。
第一个
wj8zmpe12#
如果parent为null,我们将使用id作为父值,并首先按父值排序(否则我们将无法获得您的结果)。如果父值比较结果为零,我们将按id排序。
mcvgt66p3#
您可以使用
reduce
将每个数组分组到其父数组。如果父数组为null,则使用0
。使用另一个reduce
来构造最终数组。