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