如何测试是否存在已存储在本地存储阵列中的特定对象属性值

时间:2017-09-14 11:35:52

标签: javascript html

我的HTML,siteName和siteUrl中有两个输入值,我将它们设置为两个对象属性(name:siteName,url:siteUrl)。然后在创建对象后我将它推送到一个数组并存储到浏览器本地存储中,但在它进入本地存储之前我想测试对象属性名称值,如果它已经在那里提醒我

这是我现在的代码......

//get site name and site url
var siteName = document.getElementById('siteName').value; 
var siteUrl = document.getElementById('siteUrl').value;

var bookmark = {

  name:siteName,
  url:siteUrl
}

/test if item bookmarks is null
if(localStorage.getItem('bookmarks') === null){

//Initiate Array
var bookmarks = [];

//add to array
bookmarks.push(bookmark);

//set to local storage
localStorage.setItem('bookmarks', JSON.stringify(bookmarks));


//get bookmarks from local storage
}else{
var bookmarks = JSON.parse(localStorage.getItem('bookmarks'));

//add bookmark in array
bookmarks.push(bookmark);


//re-set back to local storage
localStorage.setItem('bookmarks', JSON.stringify(bookmarks));

}

2 个答案:

答案 0 :(得分:0)

你可以使用.length length属性返回数组中元素的数量。并且.valueOf()方法返回字符串对象的值但是.valueOf()不能在代码中显式使用。

答案 1 :(得分:0)

有两种方法可以做到这一点。

第一种方法 -

//get localstorage value
var bookmarks = JSON.parse(localStorage.getItem('bookmarks'));
var flagExists = false;

if(bookmarks != null && bookmarks.length > 0){
    for(var i=0; i<bookmarks.length; i++){
        var existingBookmark = bookmarks[i];
        //check if your current value against key name is already present in any existing bookmar 
        if(bookmark.name === existingBookmark.name){
            //do anything that you want here
            flagExists = true;
            break;
        }
    }
}

第二种方法是使用Lodash库。使用lodash,您可以在一行中完成此操作。

//get localstorage value
var bookmarks = JSON.parse(localStorage.getItem('bookmarks'));
var flagExists = false;
var _ = require("lodash");

if(bookmarks != null && bookmarks.length > 0){
    var flagExists = _.find(bookmarks, {'name': bookmark.name}) != null;
    //do whatever you want
}