Javascript 获取并设置数组位置中的cookie值

Javascript 获取并设置数组位置中的cookie值,javascript,cookies,join,split,setcookie,Javascript,Cookies,Join,Split,Setcookie,好的,我有逻辑,但不确定如何写入cookie中用管道分隔的特定位置| 例如,拿一块含有0 | 0 | 0 | 0的饼干为例 如果全局变量设置为Y,则将值c和d写入第二和第三位置(假设数组),如果cookie存在-如果cookie不存在,则创建一个具有0 | 0 | c | d的cookie 如果全局变量为null,则将值a和b写入0和第1位置(如果cookie存在)-如果cookie不存在,则创建一个具有a | b | 0 |的cookie 我理解获取cookie,并拆分cookie以获取值,但

好的,我有逻辑,但不确定如何写入cookie中用管道分隔的特定位置|

例如,拿一块含有0 | 0 | 0 | 0的饼干为例

如果全局变量设置为Y,则将值c和d写入第二和第三位置(假设数组),如果cookie存在-如果cookie不存在,则创建一个具有0 | 0 | c | d的cookie

如果全局变量为null,则将值a和b写入0和第1位置(如果cookie存在)-如果cookie不存在,则创建一个具有a | b | 0 |的cookie

我理解获取cookie,并拆分cookie以获取值,但不确定如何写入特定位置。我假设使用“join”

函数createCookie(名称、值、天数){
如果(天){
变量日期=新日期();
date.setTime(date.getTime()+(天*24*60*60*1000));
var expires=“;expires=“+date.togmString();
}
else var expires=“”;
document.cookie=name+“=”+value+expires+“path=/”;
}
函数readCookie(名称){
变量nameEQ=name+“=”;
var ca=document.cookie.split(“;”);
对于(变量i=0;i
假设您想要的cookie值被命名为
“pipes”
,并且您的变量被命名为
globalVar
,您可以这样做:

var val = readCookie("pipes") || "";
var valArray = val.split("|");
if (valArray.length >= 4) {
    if (globalVar == "Y") {
        valArray[2] = 'c';
        valArray[3] = 'd';
    } else if (globalVar == null) {
        valArray[0] = 'a';
        valArray[1] = 'b';
    }
    val = valArray.join("|");
} else {
    // fully formed cookie value didn't exist
    if (globalVar == "Y") {
        val = "0|0|c|d";
    } else {
        val = "a|b|0|0";
    }
}
createCookie("pipes", val, 365);
我必须说,在cookie中存储这个管道化的值非常不方便,并且需要更多的代码,而不仅仅是从cookie中存储和检索多个值

从您的评论中,听起来数据是storeID | storeLocation,您有两个。我建议你这样做:

var store1 = readCookie("store1");    // "1640|Jacob's Point"
var store2 = readCookie("store2");    // "2001|Fred's Point"
或者,如果要创建函数,可以执行以下操作:

function readStoreInfo(item) {
    var info = readCookie(item);
    if (info) {
        var data = info.split("|");
        return({id: data[0], name: data[1]});
    }
    return(null);
}

function writeStoreInfo(item, obj) {
    var val = obj.id + "|" + obj.name;
    createCookie(item, val, 365);
}
因此,要读取store1的数据,只需调用:

var store1Info = readStoreInfo("store1");
store1Info.id = 123;
writeStoreInfo("store1", store1Info);

然后,您可以独立地读取和写入store1和store2的数据。

对于存储值,您有什么建议?我的值是这种格式的字符串,例如:1640 | Jacob's Point | 2001 | Fred's Point为了使用该数据,您必须将其分成四个部分。所以,为什么不将每个组件存储在它自己的命名cookie值中,然后就可以将每个组件检索到它自己的变量中呢。然后,你不必为了存储和使用它们而将它们组合和分离。四个变量,四个cookie值。不幸的是,我必须将所有数据都保存在一个cookie中-我想将数据分成两个cookie,但我们已经有太多的cookie,现在限制了我们使用的cookie数量,等等@Jason-从技术上讲,这都是一个巨大的cookie字符串。从cookie字符串中读取的每个名称/值对只是较大cookie字符串的一部分。只要看看readCookie是如何工作的,就可以看到它的作用。但是,如果你不想让商店有两个名称/值对,那么你可以坚持第一种方式或做事情,以及额外的复杂性来更新一个商店的价值。对,但是IE和20个cookie的限制(我们的cookie像疯了一样激增)让我们有点困难,直到我们通过一次清理它们的行动
var store1Info = readStoreInfo("store1");
store1Info.id = 123;
writeStoreInfo("store1", store1Info);