Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/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_Algorithm_Performance_List - Fatal编程技术网

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

Javascript 在两个列表中重新排序项目,javascript,algorithm,performance,list,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{

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;

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

如果这是您想要的,请看这个?

我建议对原始数组进行排序,然后从中获取一个平面数组。不,这没有帮助。请注意,我希望数组具有相同的排序,而不仅仅是合并