将对象设置为拆分数组

时间:2010-07-15 02:05:33

标签: javascript

我不是一个javascript大师。我在下面有以下代码:

var aCookieValues = sCookieContentString.split('&'); // split out each set of key/value pairs
var aCookieNameValuePairs = aCookieValues.split('='); // return an array of each key/value

我要做的是将第一个字符串拆分为&然后创建另一个数组,该数组接受第一个数组并通过aCookieValues数组中每个值中存在的=字符进一步拆分

我收到错误aCookieValues.split不是函数。

我见过一个基本上做同样事情的例子,但这个家伙第二次使用循环:

http://seattlesoftware.wordpress.com/2008/01/16/javascript-query-string/

    // '&' seperates key/value pairs
    var pairs = querystring.split("&");

    // Load the key/values of the return collection  
    for (var i = 0; i < pairs.length; i++) {
        var keyValuePair = pairs[i].split("=");
        queryStringDictionary[keyValuePair[0]] = keyValuePair[1];
    }

最终我在这里想要实现的是一个最终字典,其中键/值对基于'='拆分。我只是想分割一个cookie的值并将其推入一个好的字典中,以便稍后我可以从该字典中获取某些值。

3 个答案:

答案 0 :(得分:3)

您收到此错误是因为aCookieValues是一个数组,并且它没有split方法。您需要在split的每个元素上调用aCookieValues方法:

var aCookieValues = sCookieContentString.split('&');

for (var i = 0; i < aCookieValues.length; i++) {
   var aCookieNameValuePairs = aCookieValues[i].split('=');

   // Handle aCookieNameValuePairs[0] as the key
   // Handle aCookieNameValuePairs[1] as the value
}

要把好词典中的所有内容都删掉,只需在for循环之前声明它:var myDict = {},然后在split('=')调用之后添加以下内容:

myDict[aCookieNameValuePairs[0]] = aCookieNameValuePairs[1];

编辑:在正确阅读您的问题之后,与您提供的代码段中使用的方法相同。我希望至少这可以解释它是如何工作的:)

答案 1 :(得分:1)

split对字符串进行操作。您正在尝试拆分aCookieValues,这是一个数组。您引用的示例是循环遍历数组,然后将每个元素拆分为字符串。

只是为了好玩,处理这种情况的一种方法是使用map函数,该函数对数组的每个元素执行操作,并作为结果发出数组。如果您为所有数组提供了通用映射函数,请执行以下操作:

if (!Array.prototype.map) { // don't step on anyone's toes
  Array.prototype.map = function( f ) {
    var result = [];
    var aLen = this.length;
    for( x = 0 ; x < aLen ; x++ ) {
      result.push( f(this[x]) );
    }
    return result; 
  };
};

...您可以直接将其称为阵列上的方法。因此:

​yourstring = 'x=3&y=4&zed=blah&something=nothing';
dictionary = yourstring.split('&').map( function(a){ return a.split('='); } );

dictionary现在将成为名称/值对(数组)的干净数组,如下所示:

[["x", "3"], ["y", "4"], ["zed", "blahblah"], ["something", "nothing"]]

如果您的用例变得复杂,那么这样的方法可能是一个很好的抽象。当然,如果需要,您可以将这些数据排列在其他结构中,方法是使用传递给map的函数,或者在单独的传递中处理。

答案 2 :(得分:1)

在第二行中,当你是一个在字符串上定义的函数时,你试图在数组上调用split()。

示例:

"a=1&b=2&c=3".split('&') returns an array ['a=1','b=2','c=3']

然后,您的代码将调用数组上的split:

['a=1','b=2','c=3'].split('=')

但该功能不存在。看起来您的目标是将每个字符串拆分为数组,因此您在问题中给出的示例似乎是合适的 - 遍历每个元素并将其拆分。