如果之前有人问我,我很抱歉,但我似乎无法找到其他帖子的解决方案。
我正在尝试在本地存储中构建一个json数组(这很好),但想在添加新值之前检查条目是否已存在。
Json本身
[{"title":"title1","url":"somefile1.pdf","background":"bg1.png"},
{"title":"title2","url":"somefile2.pdf","background":"bg2.png"},
{"title":"title3","url":"somefile3.pdf","background":"bg3.png"}]
现在我如何查询数组以确保只添加唯一条目?
下面是用
添加到数组的代码var oldItems = JSON.parse(localStorage.getItem('itemsArray')) || [];
var newItem = {
'title': title,
'url': url,
'background': background
};
// Need to check the newItem is unique here //
oldItems.push(newItem);
localStorage.setItem('itemsArray', JSON.stringify(oldItems));
我认为在设置localstorage对象之前我可以使用jquery unique函数
var cleanedItems = $.unique(oldItems);
localStorage.setItem('itemsArray', JSON.stringify(cleanedItems));
但那不起作用......
答案 0 :(得分:1)
您必须遍历从本地存储中解析的数组中的每个项目,并使用新项目执行对象相等性测试。
对象相等性测试不像obj1 == obj2
那么简单。
以下是一些让您入门的参考资料
通过使用JSON.stringify
将新对象作为JSON字符串与旧数组中的对象作为JSON字符串进行比较,以下内容可能最终为您服务。
function objInArr(newObj, oldItems) {
var newObjJSON = JSON.stringify(newObj);
for (var i = 0, l = oldItems.length; i < l; i++) {
if (JSON.stringify(oldItems[i]) === newObjJSON) {
return true;
}
}
return false;
}
var oldItems = JSON.parse(localStorage.getItem('itemsArray')) || [];
var newItem = {
'title': title,
'url': url,
'background': background
};
// Need to check the newItem is unique here
if (!objInArr(newItem, oldItems)) {
oldItems.push(newItem);
}
localStorage.setItem('itemsArray', JSON.stringify(oldItems));