如果数组不存在于另一个数组Javascript中,则从数组中删除值

时间:2017-03-30 07:52:32

标签: javascript arrays cookies ember.js

我有一个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);
    }
});

目前它似乎正在删除数组中的错误值,例如它删除最后一个数组值而不是第一个数组值,然后从数组中删除每个值。我的过滤做错了/我的逻辑错了吗?

谢谢。

1 个答案:

答案 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)替换为您使用的功能。