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