与其他列表中的字段对应的订单列表-下划线Javascript

与其他列表中的字段对应的订单列表-下划线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'…}] 如何使用下划线完

我有两个包含json结构的列表。这些结构具有相应的键(不一定是相同的名称),其值在两个结构中都存在,唯一且不重复

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] });