如果触发更改事件,我需要找出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);
}
});
做到这一点的最佳方法是什么?
答案 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)