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

时间:2016-09-05 12:42:35

标签: javascript algorithm performance list

给出列表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;

1 个答案:

答案 0 :(得分:0)

您可以尝试一种递归方法,将list A中的所有元素逐一添加到list 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,[]);

如果这是您想要的,请查看此jsfiddle