如何避免重复数组 push() 函数中的字段?
How do avoid duplicating a field in an array push() function?
我有一个数组,可以在 viewed/viewed 时收集图像的统计信息。读取数组时,它会显示捕获的信息,例如用户查看的日期和特定用户的 _id(由 Meteor.user()._id;
生成)。如下图所示:
{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 });
非常感谢任何帮助!
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(),您可以为每个对象的 return viewedBy 属性 创建一个映射函数:
var viewedByPeople = viewStatisticsArray.map(function(d) {
return d.viewedBy;
}
if (viewedByPeople.indexOf(itemName.viewedBy) == -1) {
viewStatisticsArray.push({viewedDate: Date(), viewedBy: Meteor.user()._id });
}
我有一个数组,可以在 viewed/viewed 时收集图像的统计信息。读取数组时,它会显示捕获的信息,例如用户查看的日期和特定用户的 _id(由 Meteor.user()._id;
生成)。如下图所示:
{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 });
非常感谢任何帮助!
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(),您可以为每个对象的 return viewedBy 属性 创建一个映射函数:
var viewedByPeople = viewStatisticsArray.map(function(d) {
return d.viewedBy;
}
if (viewedByPeople.indexOf(itemName.viewedBy) == -1) {
viewStatisticsArray.push({viewedDate: Date(), viewedBy: Meteor.user()._id });
}