Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何按两个键和一个条件对数组排序_Javascript_Sorting_Prestashop - Fatal编程技术网

Javascript 如何按两个键和一个条件对数组排序

Javascript 如何按两个键和一个条件对数组排序,javascript,sorting,prestashop,Javascript,Sorting,Prestashop,首先,我为这个令人困惑的标题感到抱歉,我真的找不到任何好的标题 所以,我试图在prestashop中导入一些类别 我的阵列 id parent 556 2 563 2 568 2 511 510 555 510 . . . 510 568 我想按这个顺序进口。Prestashop给出错误,因为类别id 511的父类别(510)还不存在 我不知道如何对这个数组进行排序,这样就不会发生

首先,我为这个令人困惑的标题感到抱歉,我真的找不到任何好的标题

所以,我试图在prestashop中导入一些类别

我的阵列

id          parent
556         2
563         2
568         2
511         510
555         510
.
.
.
510         568
我想按这个顺序进口。Prestashop给出错误,因为类别id 511的父类别(510)还不存在


我不知道如何对这个数组进行排序,这样就不会发生这种情况。

您可以使用一个树,首先使用顶级项生成结果

树是在一个循环中构建的,其中包含未排序的项和一个用于收集项的临时对象
o
。然后检查
p
中收集的所有父节点,如果没有可用数据,则会找到一个根节点并将其添加到结果
r
,该结果随后作为树返回

对于最终的排序顺序,将对树进行迭代,并将可用的
数据
推送到已排序的数组中。如果找到一个
children
属性和一个数组,则通过递归调用
iter
来迭代子项,以获得正确的项目顺序,这意味着首先推送父项

var data=[{id:556,父:2},{id:563,父:2},{id:568,父:2},{id:511,父:510},{id:555,父:510},{id:510,父:568}],
排序=[],
树=函数(数据){
变量o={},p={},r=[];
data.forEach(函数(a){
var temp={data:a};
p[a.parent]=真;
temp.children=o[a.id]&&o[a.id]。children;
o[a.id]=温度;
o[a.parent]=o[a.parent]|{};
o[a.parent]。children=o[a.parent]。children | |[];
o[a.parent].children.push(temp);
});
Object.keys(p).forEach(函数(k){
如果(!o[k].data){
r、 推(o[k]);
}
});
返回r;
}(数据);
tree.forEach(函数iter(n){
如果(n.数据){
排序。推送(n.数据);
}
if(数组isArray(n.children)){
n、 儿童。forEach(iter);
}
});
控制台日志(已排序)

.as console wrapper{max height:100%!important;top:0;}
如何存储此数据?我从XML中获取它,并将其解析为Javascript中的对象数组。如果数据中存在循环关系,则无法对列表进行排序,以便一次导入。您可能需要在列表上传递两次。列表中第一项的父项是什么?这是算法问题吗?我的意思是,行的数量是否如此之大,以至于您担心性能/计算复杂性?