2017-04-10 217 views
0

我有一個數組,可以在查看/查看時收集圖像的統計數據。讀取數組時,它會顯示捕獲的信息,例如用戶查看的日期以及特定用戶_id(由Meteor.user()._id;生成)。如下圖所示顯示:如何避免重複數組push()函數中的字段?

{viewedDate: "Sat Apr 08 2017 23:00:47", viewedBy: "udEnfEmy5DSBvDsSy"} 
{viewedDate: "Sat Apr 08 2017 23:01:17", viewedBy: "udEnfEmy5DSBvDsSy"}  
{viewedDate: "Sat Apr 08 2017 23:01:27", viewedBy: "udEnfEmy5DSBvDsSy"}  
{viewedDate: "Sat Apr 08 2017 23:02:37", viewedBy: "udEnfEmy5DSBvDsSy"} 

正如你會注意到,在viewedBy領域重複。如何避免viewedBy字段中的重複項?

查找下面我當前的代碼:

var viewStatistics = buyList.find({_id:"kegqdvFHFoQptvJXn"}); 
    var currentUserID = Meteor.user()._id;   
    viewStatistics.forEach(function(itemName){ 

    viewStatisticsArray = [,...itemName.viewStatisticsArray]; 

    if (viewStatisticsArray.indexOf(itemName)== -1) viewStatisticsArray.push({viewedDate: Date(), viewedBy: Meteor.user()._id }); 

}); 

在一個失敗的嘗試,以避免進入重複爲viewedBy我也曾嘗試以下邏輯上使的感覺很多的代碼,但未能獲得預期的效果:

if (viewStatisticsArray.indexOf(itemName.viewedBy)== -1) viewStatisticsArray.push({viewedDate: Date(), viewedBy: Meteor.user()._id }); 

任何幫助非常感謝!

+0

爲什麼不乾脆將「udEnfEmy5DSBvDsSy」保存在一個變量中,然後將'viewedBy'字段設置爲變量? – Carcigenicate

回答

0

viewStatisticsArray.indexOf()== -1將不起作用,因爲數組的每個元素都不相同(日期不同)。

你可以這樣做:

var viewedByItem = viewStatisticsArray.filter(function(d) { 
    return d.viewedBy == itemName.viewedBy; 
}); 
if (viewedByItem.length == 0) { 
    viewStatisticsArray.push({viewedDate: Date(), viewedBy: Meteor.user()._id }); 
} 

,或者如果你仍然想使用的indexOf(),你可以做一個映射函數返回每個對象的viewedBy屬性:

var viewedByPeople = viewStatisticsArray.map(function(d) { 
    return d.viewedBy; 
} 
if (viewedByPeople.indexOf(itemName.viewedBy) == -1) { 
    viewStatisticsArray.push({viewedDate: Date(), viewedBy: Meteor.user()._id }); 
}