首页 > 解决方案 > localStorage,找出新旧值之间的差异

问题描述

如果触发更改事件,我需要找出 localStorage 的新旧值的差异。

我可以在不同的选项卡中切换相同的 localStorage 键,所以如果我添加一个,值将是:

'1234,4321'

但是当我删除一个时,它将是:

'1234'

我下面的代码会将字符串转换为数组,用逗号分隔。然而,这似乎只能在周围工作,所以如果我删除一个,下面的代码将显示一个空数组,而不是删除的数字。

window.addEventListener('storage', function (e) {
    if (e.key === 'favourites') {

        let newv = e.newValue.split(',').filter(id => !!id);
        let oldv = e.oldValue.split(',').filter(id => !!id);

        let difference = newv.filter(function (i) {
            return oldv.indexOf(i) === -1;
        });

        console.log(difference);
    }
});

做这个的最好方式是什么!?

标签: javascript

解决方案


因此,您需要通过查看原始值是否没有来自新值来检查添加。要检查已删除的项目,您需要检查原始值中是否不存在 id。

const oldValue = '1234,4321'
const newValue = '1234,5555'

const oldValueIds = oldValue.split(",")
const newValueIds = newValue.split(",")

const removed = oldValueIds.filter(id => !newValueIds.includes(id))
const added = newValueIds.filter(id => !oldValueIds.includes(id))

console.log('removed: ', removed)
console.log('added: ', added)


推荐阅读