1

Cookie 内に配列要素が既に存在することを確認するにはどうすればよいですか?

これが私のコードです:

var cookieList = function (cookieName) {
    var cookie = Cookies.get(cookieName);
    var items = cookie ? cookie.split(/,/) : new Array();

    return {
        "add": function (val) {
            items.push(val);
            Cookies.set(cookieName, items.join(','), { path: '/' });
        }
    }
}

var list = new cookieList("MyItems");

$('.items').on('click', '.add', function () {
    var imageId = $(this).data("id");
    list.add(JSON.stringify(imageId));
});
4

2 に答える 2

2

existsメソッドを追加してcookieList、渡された値がitems配列に存在するかどうかを確認するには、Array.indexOf()

var cookieList = function (cookieName) {
    var cookie = Cookies.get(cookieName);
    var items = cookie ? cookie.split(/,/) : new Array();

    return {
        "add": function (val) {
            items.push(val);
            Cookies.set(cookieName, items.join(','), {
                path: '/'
            });
        },
        exists: function (val) {
            return items.indexOf(val) > -1
        }
    }
}

var list = new cookieList("MyItems");

$('.items').on('click', '.add', function () {
    var imageId = $(this).data("id");
    list.add(JSON.stringify(imageId));
    var exists = list.exists(JSON.stringify(imageId))
});

デモ:フィドル

于 2015-06-17T07:23:46.247 に答える
0

FWIW、js-cookieはすぐに JSON を処理します。

var cookieList = function (cookieName) {
    var items = Cookies.getJSON(cookieName) || [];

    return {
        add: function (val) {
            items.push(val);
            Cookies.set(cookieName, items);
            // "path: /" is default,
            // see https://github.com/js-cookie/js-cookie/tree/v2.0.2#path
        },
        exists: function (val) {
            return items.indexOf(val) > -1
        }
    }
}

var list = new cookieList("MyItems");

$('.items').on('click', '.add', function () {
    var imageId = $(this).data("id");
    list.add(JSON.stringify(imageId));
    var exists = list.exists(JSON.stringify(imageId))
});

https://github.com/js-cookie/js-cookie/tree/v2.0.2#jsonを参照してください

于 2015-06-30T00:16:24.890 に答える