在两个列表中重新排序项目
Reordering items in two lists
给定列表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 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,[]);
如果这是你想要的,看看这个文件。
相关文章:
- 使用JS或新查询对列表进行排序
- 主干中的比较器在添加新模型时需要排序调用
- 插入按字母顺序、javascript或jquery排序的新列表
- 无法从jQuery可排序列表中删除新添加的项
- 使用“可排序”时获取新元素信息
- JavaScript 将文本框存储中的值引入数组中,创建新数组进行排序
- 在使用可排序排序期间/之后显示使用 JSON 创建的列表中的项目位置
- React Native ListView 不会在排序或检索新数据后更新
- 使用 UI 可排序,在单击按钮时根据给定值将项目移动到新位置
- AngularJS:插入新项目后对列表重新排序
- jQuery dataTable 不会对新数据进行排序
- jQuery UI 可排序在克隆和附加新的可排序列表后不会刷新
- 如何使用布局管理器重新排序/排序嵌套视图而不重新渲染
- ractive js :与模板中键部分关联的嵌套对象列表的直接 DOM 插入排序/排序 #each 顺序
- 在backbone.js中,如何使用新的模型数据更新视图,同时在没有完整渲染的情况下保持排序顺序
- jQuery UI可排序-排序时表格单元格丢失边框
- 对对象数组进行排序,并将具有相同键/值对的对象推送到新数组
- 嵌套可排序新添加的项目不会移动
- 如何使用jquery同位素按日期(新)排序
- 对象数组的复合排序(排序)