我有一个用于构建通知系统的Ember应用程序,如果通知被我的用户拒绝,我会将通知UUID存储在cookie中,这样就不会再次显示。
一个月后,我的通知从数据库中删除,我想做的是检查我的数据库并获取所有通知的数组,然后将UUIDS与我的cookie数组进行比较。
如果我的cookie数组中存在一个UUID,而我的数据库中不存在UUID,我想从cookie数组中删除它。
这是我的代码。
this.get('userNotificationServices').fetch().then(allNotifications => {
if (this.getCookie("dismissed-notifications")) {
var notificationIdsInCookie = this.getCookie("dismissed-notifications").split(',');
notificationIdsInCookie.forEach(function (value) {
var index = allNotifications.findIndex(x => x.id === value);
if (index === -1) {
notificationIdsInCookie.splice(index, 1);
}
});
this.setCookie("dismissed-notifications", notificationIdsInCookie);
}
});
目前,它似乎正在删除数组中的错误值,例如,它将删除最后一个而不是第一个数组值,然后从数组中删除每个值。我的过滤器做错了吗/逻辑错了吗?
谢谢。
最佳答案
我强烈建议不要使用
foreach
循环,而是创建一个新的。
您可以使用Array.prototype.filter
:
notificationIds = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
allNotifications = [1, 3, 10];
filtered = notificationIds.filter(id => !allNotifications.includes(id));
console.log(filtered);
将
!allNotifications.includes(id)
替换为您使用的功能。