2017-04-17 123 views
1

我有猫鼬ID的数组如下:排序在JavaScript的数组基于另一个阵列

 var ids =[ 
     mongoose.Types.ObjectId('58c2871414cd3d209abf4fc1'), 
     mongoose.Types.ObjectId('58c2871414cd3d209abf4fc0'), 
     mongoose.Types.ObjectId('58c2871414cd3d209abf5fc0') 
     ]; 

当我打电话给我的猫鼬函数来得到匹配这些ID的子文档,对象还给我按照它们在数据库中的发现顺序。我可以根据上述'ids'数组的顺序重新排序吗?

的数据返回给我如下:

[ { _id: 58c2871414cd3d209abf5fc9, 
     companyname: 'Dell', 
     position: 
     { _id: 58c2871414cd3d209abf5fc0, 
      title: 'Software Engineer', 
      location: 'Waterford', 
      start: 'May 2017', 
      term: 6, 
      description: ' Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dsit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi' }, 
     { _id: 58ca9fd6588205e9c8f01431, 
     companyname: 'Google', 
     position: 
     { _id: 58c2871414cd3d209abf4fc0, 
      title: 'Software Engineer', 
      location: 'Waterford', 
      start: 'May 2017', 
      term: 6, 
      description: ' Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dsit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi' }, 

     { _id: 58ca9fd6588205e9c8f01431, 
     companyname: 'Google', 
     position: 
     { _id: 58c2871414cd3d209abf4fc1, 
      title: 'Software Engineer', 
      location: 'Waterford', 
      start: 'June 2017', 
      term: 12, 
      description: ' Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dsit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi' }, 
] 

是否有任何方式重新排序在原有基础阵列上这些?请注意,数组中返回了两个_ids,它是我需要订购的位置子文档的ID。真的卡住了,如果任何人都可以帮助这将是伟大的!

编辑:

我Node.js的功能如下:

var ids =[mongoose.Types.ObjectId('58c2871414cd3d209abf4fc0'), mongoose.Types.ObjectId('58c2871414cd3d209abf4fc1'), mongoose.Types.ObjectId('58c2871414cd3d209abf5fc0')]; 
    User.aggregate({ $unwind : "$position" }, 
    { $match: { "position._id": { 
     $in: ids } 
    } 
    } 
    , function(err, results){ 

    // results.sort((a, b) => { 
      console.log(a+" "+b); 
    //  return ids.indexOf(mongoose.Types.ObjectId(a.position._id)) 
//  - ids.indexOf(mongoose.Types.ObjectId(b.position._id)) 
// }) 
     res.send({results:results}); 
    }); 

    }); 

在控制台登录:

[object Object] [object Object] 
[object Object] [object Object] 

回答

0

可以使用Array.prototype.sort()与比较功能,比较函数使用Array.prototype.indexOf()找到ids中的每个元素的索引并给它element.postion.id

下面是代码:

data.sort((a, b) => { 
    return ids.indexOf(a.position._id) - ids.indexOf(b.position._id) 
}) 

我以前_id作为一个字符串,你必须将其更改为mongoose.Types.ObjectId()

我觉得这就像

data.sort((a, b) => { 
    return ids.indexOf(mongoose.Types.ObjectId(a.position._id)) - ids.indexOf(mongoose.Types.ObjectId(b.position._id)) 
}) 
+0

感谢您的帮助下完成!我有点卡住如何将其纳入我的代码,但我更新了我的问题,以显示我的Node.js发布请求获取数据..如果我做错了,你会有一个想法吗?现在,如果我把它留在它被评论的地方,数组将返回相同的..再次感谢! – user

+0

你的意思是当排序函数不被评论时的代码返回相同的数组? –

+0

是的,这很奇怪..我不确定我是否在错误的地方或东西? @Khaled Hamed – user

相关问题