2017-04-10 4 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 필드에서 중복 된 것을 어떻게 피할 수 있습니까? 나는 또한 논리적으로 감각을 많이 만드는 아래의 코드를 시도 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 }); 

}); 

하지만 원하는 효과를 가져 오지 못했습니다 :

내 현재 코드를 보자

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