设置数组键值对JavaScript

时间:2015-06-14 22:25:07

标签: javascript arrays keyvaluepair

所以,我遇到了一个问题,而对于我的生活,我似乎无法解决它。这看起来非常基本,但我无法理解为什么这段代码无法正常工作。

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

这是我的代码

<Border x:Name="SwipeTarget">
  <i:Interaction.Behaviors>
    <local:SwipeEventBehavior Direction="Left">
      <cm:ActionMessage AssociatedObject="{Binding ElementName=SwipeTarget" Method="LeftSwipe" />
    </local:SwipeEventBehavior>
  </i:Interaction.Behaviors>
</Border>

5 个答案:

答案 0 :(得分:0)

假设temp.length大于0,则应填充

undefined。您的返回值始终为mycookies[cookiename];永远不会为console.log(mycookies)分配值。

尝试在返回语句之前添加AVSpeechSynthesizer

答案 1 :(得分:0)

Mycookies应该是Object,而不是Array

var mycookies = {};

答案 2 :(得分:0)

修剪你的密钥,因为cookie字符串看起来像这样:

  

&#34; __ UTMA = 250730393.1032915092.1427933260.1430325220.1430325220.1; __utmc = 250730393; __utmz = 250730393.1430325220.1.1.utmcsr =(直接)| utmccn =(直接)| utmcmd =(无);点击次数= 22; _gat = 1; _ga = GA1.2.1032915092.1427933260&#34;

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

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];
}

演示:JSBin

答案 3 :(得分:0)

我的朋友,你有点困惑(也许你已用PHP编程),因为在JavaScript中,class SetDate { var seconds = Int() var minutes = Int() var hours = Int() var days = Int() var weeks = Int() var months = Int() var years = Int() func setLabels(seconds,minute,hous,weeks,days,months,years) { self.SLabel.text = String(seconds) self.MLabel.text = String(minute) self.HLabel.text = String(hous) self.WLabel.text = String(weeks) self.DLabel.text = String(days) self.MLabel.text = String(months) self.YLabel.text = String(years) } func populateVars(){ seconds = date2.secondsFrom(date1) minutes = date2.minutesFrom(date1) hours = date2.hoursFrom(date1) days = date2.daysFrom(date1) weeks = date2.weeksFrom(date1) months = date2.monthsFrom(date1) years = date2.yearsFrom(date1) setLabels(seconds,minutes,hours,weeks,days,months,years) } 不是关联的键:值对象,它是索引基于对象。但你要找的是 Object Literal

Array

但你可以重构你的代码:

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];
}

答案 4 :(得分:0)

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

因此,您的mycookies变量应该是一个对象,而不是一个数组。

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

以下是固定代码的示例代码段,我添加了一个模拟Cookie字符串,以便它可以可靠地运行:

&#13;
&#13;
var mockCookies = "a=1;b=2;c=3";
function getcookie(cookiename){
     var mycookies = {}; // The cookie jar 
     var temp = mockCookies.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];
}


function printCookie(name) {
    alert(getcookie(name));
}
&#13;
<button onclick="printCookie('a')">Get a</button>
<button onclick="printCookie('b')">Get b</button>
<button onclick="printCookie('c')">Get c</button>
&#13;
&#13;
&#13;