确保独特的Json

时间:2013-11-09 00:00:20

标签: javascript json local-storage

如果之前有人问我,我很抱歉,但我似乎无法找到其他帖子的解决方案。

我正在尝试在本地存储中构建一个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));

但那不起作用......

1 个答案:

答案 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));