设置数组键值对JavaScript

设置数组键值对JavaScript,javascript,arrays,keyvaluepair,Javascript,Arrays,Keyvaluepair,所以,我有一个问题,就我的一生而言,我似乎无法解决它。这看起来很基本,但我一辈子都无法理解为什么这个代码不起作用 我的问题是,我正在为数组分配一个键值对,但是没有分配这些值。这是一个可变范围的问题吗 这是我的密码 function getcookie(cookiename){ var mycookies = []; // The cookie jar var temp = document.cookie.split(";"); var key = "";

所以,我有一个问题,就我的一生而言,我似乎无法解决它。这看起来很基本,但我一辈子都无法理解为什么这个代码不起作用

我的问题是,我正在为数组分配一个键值对,但是没有分配这些值。这是一个可变范围的问题吗

这是我的密码

function getcookie(cookiename){
     var mycookies = []; // The cookie jar 
     var temp = document.cookie.split(";");
     var key  = "";
     var val  = "";
     for(i=0;i<temp.length;i++){
         key = temp[i].split("=")[0];
         val = temp[i].split("=")[1];
         mycookies[key] = val;
     }
     return mycookies[cookiename];
}
函数getcookie(cookiename){
var mycokies=[];//cookie jar
var temp=document.cookie.split(“;”);
var key=“”;
var val=“”;

对于(i=0;i
mycookies
应在假设
temp.length
大于0的情况下填充。您的返回值始终是
未定义的
mycookies[cookiename]
从未分配值


尝试在返回语句之前添加
console.log(mycokies)

mycokies
应该是
对象,而不是
数组

var mycookies = {};

修剪密钥,因为cookie字符串如下所示:

“uuUTMA=250730393.1032915092.1427933260.1430325220.1430325220.1;uuuUTMC=250730393.1430325220.1.1.utmcsr=(直接)| utmccn=(直接)| utmcmd=(无);点击次数=22;gat=1;ga=GA1.2.1032915092.1427933260”

因此,当您在
上拆分时,在某些键名之前会有一个额外的空格

function getcookie(cookiename){
     var mycookies = []; // The cookie jar 
     var temp = document.cookie.split(";");
     var key  = "";
     var val  = "";
     for(i=0;i<temp.length;i++){
         key = temp[i].split("=")[0].trim(); // added trim here
         val = temp[i].split("=")[1];
         mycookies[key] = val;
     }
     return mycookies[cookiename];
}
函数getcookie(cookiename){
var mycokies=[];//cookie jar
var temp=document.cookie.split(“;”);
var key=“”;
var val=“”;

对于(i=0;i我的朋友,你有点困惑(也许你是用PHP编程的),因为在JavaScript中,
数组
不是一个关联的键:值对象,它是一个基于索引的对象。但是你要找的是一个对象文本

function getcookie (cookiename){
    var i, max, keyvalue, key, val,
        cookiesObj = {}, //empty object literal
        cookiesArr = document.cookie.split(";");
    for(i=0, max=cookiesArr.length; i<max; i+=1) {
        keyvalue = cookiesArr[i].split("=");
        key = keyvalue[0].trim();
        val = keyvalue[1].trim();
        cookiesObj[key] = val;
    }
    return cookiesObj[cookiename];
}

JavaScript数组不是关联数组,只有可能的索引值是数字的,从0开始,在
array.length-1
结束。您以前可能在示例中看到或在另一种语言中使用过的是JavaScript对象,它实际上表现为关联数组。您可以通过
obje访问对象值ct['key']
或as
object.key
。第一个仅在使用变量或包含非法字符的键访问键时使用,即
某些键
,否则建议使用点访问,如第二个示例所示

因此,
myookies
变量应该是对象,而不是数组

如果您将行
var mycokies=[];
更改为
var mycokies={};
,即将其从空数组更改为空对象,则剩余的代码应按预期工作

下面是一个固定代码的示例片段,我添加了一个模拟cookies字符串,以便它能够可靠地工作:

var mockCookies=“a=1;b=2;c=3”;
函数getcookie(cookiename){
var mycokies={};//cookie jar
var temp=mockCookies.split(“;”);
var key=“”;
var val=“”;

对于(i=0;这正是它的意思……哈哈。在你回答之前我就想出来了……谢谢你所做的一切??你所做的只是让代码不那么容易理解……代码是有效的。我只是没有修剪值以删除空格。@BillyHallman,你可以选择错误的编程方式,也可以选择好的编程方式,干杯!我之前的评论仍然有效!:)服务器可以发送带有一个字符分隔符的Cookie(
Set Cookie
header);“
doment.Cookie
返回带有两个字符分隔符的字符串”
function getcookie (cookiename) {
    var cookie = "",
        cookies = document.cookie.split(";");
    cookies.forEach(function (item) {
        var keyvalue = item.split("="),
            key = keyvalue[0].trim(),
            val = keyvalue[1].trim();
        if (key === cookiename) {
            cookie = val;
            return false; //exit from iteration
        }
    });
    return cookie;
}