localStorage,查找新旧值之间的差异

时间:2019-02-21 16:59:16

标签: javascript

如果触发更改事件,我需要找出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);
    }
});

做到这一点的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

因此,您需要通过查看原始值是否不包含新值来检查是否已添加。并且要检查已删除的项目,您需要检查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)