在两个列表中重新排序项目

Reordering items in two lists

本文关键字:新排序 排序 项目 列表 两个      更新时间:2023-09-26

给定列表A中下列项目{

var A = [A,B, [A,B,C],[A,B,C],[A,B,C,D],[A,B],A,B,C]

和列表B,列表A中的所有项目都被平展:

var B = [A,B,A,B,C,A,B,C,A,B,C,D,A,B,A,B,C]

注意列表B中的内部数组表示组。

重新排序列表A中的项目的最有效方法是什么?该顺序应反映在列表b中。

例如,如果列表A的内部数组中的项B被移动到A之前,则列表应按如下方式更新:

    var A = [A,B, [B,A,C],[A,B,C],[A,B,C,D],[A,B],A,B,C]
    var B = [A,B,B,A,C,A,B,C,A,B,C,D,A,B,A,B,C]

我已经试过了:

老实说,我被卡住了!我尝试过将列表A扁平化,并根据列表B中的索引获得相应的项目,但是,这并不可靠。例如,如果所有内部组中都有两个项目,那么它似乎可以工作,但是,如果有两个以上的项目,则由于索引不匹配而崩溃。当列表很大时,我有时会遇到问题,因为它可能引用了一个已经编辑过的索引,而且我无法控制编辑。我目前的尝试可以总结为:
B.indexOf(itemFromA) + indexFromA;

您可以尝试递归方法,将从list Alist B的所有元素逐一添加。

//list = list that should be represented in B
//newList = [];
function sortList(list,newList) {
    for(var elem of list) {
        if (typeof(elem) === "object") {
            sortList(elem,newList);
        } else {
        newList.push(elem);
        }
    }
    return newList;
}
B = sortList(A,[]);

如果这是你想要的,看看这个文件。