Javascript 在另一个数组的值上加入一个数组

Javascript 在另一个数组的值上加入一个数组,javascript,arrays,mongodb,Javascript,Arrays,Mongodb,我正在使用mongodb并构建一个包含两个集合的应用程序:用户和项目。 我希望用户能够保存他们喜欢的项目,并转到他们的“保存的项目”页面,在该页面中,项目的显示顺序与上次保存时的显示顺序相反 目前,我正在将每个已保存项的id以及savedDate添加到用户的配置文件savedItems数组中,如下所示: user profile { savedItems: [{id: "", savedDate: ""}, {id: "", savedDate: ""}, etc...] } 每当需要检索

我正在使用mongodb并构建一个包含两个集合的应用程序:用户和项目。 我希望用户能够保存他们喜欢的项目,并转到他们的“保存的项目”页面,在该页面中,项目的显示顺序与上次保存时的显示顺序相反

目前,我正在将每个已保存项的id以及savedDate添加到用户的配置文件savedItems数组中,如下所示:

user profile
{
  savedItems: [{id: "", savedDate: ""}, {id: "", savedDate: ""}, etc...]
}
每当需要检索这些项时,我都会在items集合中查询该数组中ID为$的对象。像这样:

var items = Items.find({_id: {$in: _.pluck(user.savedItems, 'id')}});
这里的问题是,我不能根据添加的日期来订购这些商品

那么,是否有可能将addedate映射到检索项的每个对象上呢? 类似于:如果retrievedItems.id==savedItems.id,则将addedDate推到那里

这将产生如下项数组:

[
  {id:"", itemName:"", price: "", [...], savedDate: ""},
  {id:"", itemName:"", price: "", [...], savedDate: ""},
  [...]
]
多谢各位

我创建了两个函数来帮助您执行此操作:

function mergeDates(listDates, listItems) {

    for (var i = 0; i < listDates.length; i++) {
        var index = findListIndex(listItems, listDates[i].id);
        if (index != null) listItems[index].savedDate = listDates[i].savedDate;
    }

    return listItems;

}

function findListIndex(listItems, id) {
    for (var i = 0; i < listItems.length; i++) {
        if (listItems[i].id == id) return i;
    }
    return null;
}

希望有帮助

非常感谢。虽然最后,它嵌套了两个for循环;你认为这对10万件物品的效率有多高?对项目进行非规范化并复制savedItems数组中的所有内容不是更好吗?我承认这可能不是最快的方法,我发现这可能对您有所帮助!
var listWithDate = mergeDates(savedItems, items);