繁体   English   中英

将一个数组连接到另一个数组的值上

[英]Joining an array on another array's value

我正在使用mongodb,并且正在构建具有两个集合的应用程序: usersitems
我希望用户能够保存他们喜欢的项目,并转到他们的已保存项目页面,在该页面上,项目将以与保存时相反的顺序显示(最后一次保存显示在最前面)。

此刻,我正在将每个保存的项目的ID连同saveDate一起添加到用户的个人资料saveItems数组中,如下所示:

user profile
{
  savedItems: [{id: "", savedDate: ""}, {id: "", savedDate: ""}, etc...]
}

每当需要检索这些项目时,我都会在该项目集合中查询ID为$$的对象在此数组中。 像这样:

var items = Items.find({_id: {$in: _.pluck(user.savedItems, 'id')}});

这里的问题是我不能根据additionalDate订购那些物品。

那么有可能将addedDate映射到检索到的项目的每个对象上吗?
(类似: 如果 retriedItems.id == savedItems.id, 则将 addedDate推送到那里。)

这将导致以下项数组:

[
  {id:"", itemName:"", price: "", [...], savedDate: ""},
  {id:"", itemName:"", price: "", [...], savedDate: ""},
  [...]
]

谢谢。

JSFIDDLE

我创建了两个函数来帮助您做到这一点:

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

第一个是mergeDates,它的第一个列表包含日期,第二个列表listItems是项目列表。

我用日期循环列表,并为其中的每个项目调用第二个函数,该函数返回第二个列表中相同元素的索引,因此findListIndex将搜索所有元素并在找到相同ID时返回其索引。

现在,具有新找到索引的功能mergeDates将把saveDate值添加到listItems中,使其等于listDates上的值!

然后该函数返回包含所有项目信息的列表,包括日期!

这是调用函数的方法:

var listWithDate = mergeDates(savedItems, items);

希望能帮助到你 !

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM