我有一个Ember应用程序,我正在构建一个通知系统,如果通知被我的用户解雇,我将通知UUID存储在我的cookie中,这样它就不会再次显示。
一个月后,我的通知会从数据库中删除,我要做的是检查我的数据库并获取所有通知的数组,然后将UUIDS与我的cookies数组进行比较。
如果我的数据库中存在的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);
}
});
目前它似乎正在删除数组中的错误值,例如它删除最后一个数组值而不是第一个数组值,然后从数组中删除每个值。我的过滤做错了/我的逻辑错了吗?
谢谢。
答案 0 :(得分:0)
我强烈建议不要用a修改原始数组
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)
替换为您使用的功能。