javascript - 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);
}
});
做这个的最好方式是什么!?
解决方案
因此,您需要通过查看原始值是否没有来自新值来检查添加。要检查已删除的项目,您需要检查原始值中是否不存在 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)
推荐阅读
- mqtt - 如何处理 on_message 上收到的多个 MQTT MSG
- c++ - 的具体用例是什么!在 C++ 中
- c++ - Freetype2 - 字形不呈现/显示
- symfony4 - 找不到类扩展 SonataPagePage 列
- c - libuv 句柄在 close 之后但在 close_cb 之前是否处于活动状态?
- c++ - 在 C++ 项目中使用共享对象 (.so) 在 Windows 中使用 Visual Studio for Linux 使用 WSL 进行开发
- scala - 使用带有 akka 道具的 Guice - 找不到合适的演员构造函数
- javascript - 我想在画布 html 标记中显示多个页面预览
- python - NameError:名称“isdigit”未定义
- android - 包含对 AndroidX 和旧支持库的引用