gpt4 book ai didi

javascript - 如何通过两个键和一个条件对数组进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 16:07:09 24 4
gpt4 key购买 nike

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

所以,我正在尝试在 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, parent: 2 }, { id: 563, parent: 2 }, { id: 568, parent: 2 }, { id: 511, parent: 510 }, { id: 555, parent: 510 }, { id: 510, parent: 568 }],
sorted = [],
tree = function (data) {
var o = {}, p = {}, r = [];
data.forEach(function (a) {
var temp = { data: a };
p[a.parent] = true;
temp.children = o[a.id] && o[a.id].children;
o[a.id] = temp;
o[a.parent] = o[a.parent] || {};
o[a.parent].children = o[a.parent].children || [];
o[a.parent].children.push(temp);
});
Object.keys(p).forEach(function (k) {
if (!o[k].data) {
r.push(o[k]);
}
});
return r;
}(data);

tree.forEach(function iter(n) {
if (n.data) {
sorted.push(n.data);
}
if (Array.isArray(n.children)) {
n.children.forEach(iter);
}
});

console.log(sorted);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何通过两个键和一个条件对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41782407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com