如何检查localStorage对象数组中ID是否存在及拆分对象属性
问题解决:检查localStorage对象数组中的ID & 拆分对象变量
一、为什么includes无法检测ID存在?
你的favorites数组里存的是对象(比如{ID:123, IMAGE:'xxx', TITLE:'xxx'}),而includes(theid)是在找数组里是否有和theid完全相等的元素,显然对象和数字/字符串ID不匹配,所以检测失效。
正确的ID存在检测方法
可以用some()方法遍历数组,判断是否有对象的ID属性等于目标ID:
// 替换原来的检测逻辑 const isAlreadyFavorited = favorites.some(item => item.ID === theid); if (isAlreadyFavorited) { alert('你已经添加过这个条目了'); return; // 直接终止函数,避免重复添加 }
另外你原来的if (localStorage.getItem('favorites') != null)判断多余,因为favorites已经通过JSON.parse(...) || []处理成数组了,空数组也能正常用some()。
二、拆分数组中的单个对象到变量
如果是遍历数组时拆分每个对象的属性,或者单独取某个对象拆分,可以用对象解构赋值:
1. 遍历数组时拆分
把你原来的for循环改成解构写法,更简洁:
console.clear(); favorites.forEach(item => { // 解构赋值,把对象的属性赋值给对应变量 const { ID, IMAGE, TITLE } = item; console.log(`ID= ${ID} IMAGE=${IMAGE} TITLE=${TITLE}`); });
2. 单独拆分某个对象
比如取数组第一个对象:
if (favorites.length > 0) { const firstItem = favorites[0]; const { ID, IMAGE, TITLE } = firstItem; // 现在可以直接用ID、IMAGE、TITLE变量 }
修正后的完整代码
function checkfave(theid) { // 从localStorage获取收藏列表,无则为空数组 const favorites = JSON.parse(localStorage.getItem('favorites')) || []; const theimage = $('#theimage' + theid).attr('src'); const thetitle = $('#thetitle' + theid).text(); // 检查是否已收藏 const isAlreadyFavorited = favorites.some(item => item.ID === theid); if (isAlreadyFavorited) { alert('你已经添加过这个条目了'); return; } // 添加新收藏并保存到localStorage favorites.push({ ID: theid, IMAGE: theimage, TITLE: thetitle }); localStorage.setItem('favorites', JSON.stringify(favorites)); alert(`你已将条目 ${theid} 添加到收藏夹`); // 控制台输出收藏列表 console.clear(); favorites.forEach(item => { const { ID, IMAGE, TITLE } = item; console.log(`ID= ${ID} IMAGE=${IMAGE} TITLE=${TITLE}`); }); }
内容的提问来源于stack exchange,提问作者cathy maddox
相关产品推荐
相关产品推荐

