与其他列表中的字段对应的订单列表-下划线Javascript
我有两个包含json结构的列表。这些结构具有相应的键(不一定是相同的名称),其值在两个结构中都存在,唯一且不重复与其他列表中的字段对应的订单列表-下划线Javascript,javascript,underscore.js,Javascript,Underscore.js,我有两个包含json结构的列表。这些结构具有相应的键(不一定是相同的名称),其值在两个结构中都存在,唯一且不重复 listA=[{……title:'A'…},{……title:'B'…},{……title:'C'…}] listB=[{……名称:'A'…},{……名称:'C'…},{……名称:'B'…}] 但顺序不一样。我想对listA重新排序,使其与listB的顺序相对应 listA=[{……title:'A'…},{……title:'C'…},{……title:'B'…}] 如何使用下划线完
listA=[{……title:'A'…},{……title:'B'…},{……title:'C'…}]
listB=[{……名称:'A'…},{……名称:'C'…},{……名称:'B'…}]
但顺序不一样。我想对listA
重新排序,使其与listB
的顺序相对应
listA=[{……title:'A'…},{……title:'C'…},{……title:'B'…}]
如何使用下划线完成此操作?暴力回答:)单击下面的“运行代码片段”
var lista=[{title:'one'},{title:'three'},{title:'two'}];
var listb=[{name:'one'},{name:'two'},{name:'three'}];
函数重新排序(a,b){
返回b.reduce(函数(结果,项){
结果.推送(u.find(a),函数(ana){
返回ana.title==item.name;
}));
返回结果;
}, []);
}
document.body.appendChild(document.createTextNode(JSON.stringify(reorder(lista,listb)))代码>
您可以使用和的组合:
listB
的元素可以通过一个有效的对象键很好地识别出来,因此我将分两步进行:
构建name
的映射,以从listB
索引
使用该映射对列表A进行排序
可能是这样的:
var indexes = _(listB).reduce(function(m, e, i) {
m[e.name] = i;
return m;
}, { });
var sorted = _(listA).sortBy(function(e) { return indexes[e.title] });
这使您只需通过一次listB
,而无需反复搜索它
var listA=[
{标题:'A'},
{标题:'B'},
{标题:'C'}
];
var listB=[
{name:'A'},
{name:'C'},
{name:'B'}
];
var indexes=(列表b).reduce(函数m,e,i){
m[e.name]=i;
返回m;
}, { });
var sorted=(listA).sortBy(函数(e){返回索引[e.title]});
控制台日志(已排序)代码>
var indexes = _(listB).reduce(function(m, e, i) {
m[e.name] = i;
return m;
}, { });
var sorted = _(listA).sortBy(function(e) { return indexes[e.title] });