数组长度,键值为js

时间:2011-12-16 10:42:13

标签: javascript arrays key-value

我编写了这段代码,应该解析给定的paramUnparsed(应该是以下形式的数组: [key1 = val1,key2 = val2,..,keyn = valn] ) 。

function parseParams(paramUnparsed){
var params = [];
for ( var j = 0; j < paramUnparsed.length; j++) {
    if (paramUnparsed[j].split('=').length < 2) {
        // error ! bad input structure, ignoring params -

        params = undefined;
        break; // we don't have to return error, depending
                // on the function called and given params.

    }
    //else {
        var key = paramUnparsed[j].split('=')[0];
        var value = paramUnparsed[j].split('=')[1];
        params[key] = value;
    //}
}

console.log("In parseParams, params are: "+ concatObject(params));//DEBUG 1
console.log("In parseParams, params length is: "+ params.length);//DEBUG 2
return params;  
}

我该怎么做,仍然可以确定我正在创建的数组的长度?我总是在'DEBUG 2'打印输出上得到'0'......

4 个答案:

答案 0 :(得分:11)

创建的“params”数组是一个关联数组。 如果要获取关联数组的长度,请使用

Object.keys(params).length;

答案 1 :(得分:3)

您正在创建一个数组,但您没有将其用作数组。您正在使用它作为对象,它作为一个数组也是一个对象,但它意味着数组的长度保持为零,因为您没有添加任何数组项。

创建一个对象,并计算您添加的项目以获取计数:

function parseParams(paramUnparsed){
  var params = {}, cnt = 0;
  for (var j = 0; j < paramUnparsed.length; j++) {
    if (paramUnparsed[j].split('=').length < 2) {
      // error ! bad input structure, ignoring params -

      params = undefined;
      break; // we don't have to return error, depending
             // on the function called and given params.

    }
    var key = paramUnparsed[j].split('=')[0];
    var value = paramUnparsed[j].split('=')[1];
    params[key] = value;
    cnt++;
  }

  console.log("In parseParams, params are: "+ concatObject(params));//DEBUG 1
  console.log("In parseParams, params length is: "+ cnt);//DEBUG 2
  return params;  
}

答案 2 :(得分:1)

你并没有真正构建一个数组。数组不应该有键。你可以使用这样的对象:

var params = {};

但这不会解决您的.length问题。

您还可以做的是构建一个对象数组,其中每个对象都包含一个键和值。像这样:

function parseParams(paramUnparsed){
    var params = [];
    for (var j = 0; j < paramUnparsed.length; j++) {
        if (paramUnparsed[j].split('=').length < 2) {
            params = undefined;
            break;
        }

        var key = paramUnparsed[j].split('=')[0];
        var value = paramUnparsed[j].split('=')[1];
        params.push({ key: key, value: value });
    }

    // use like: `params[0].key` etc

    return params; 
}

答案 3 :(得分:0)

这有点奇怪。 这实际上是在一起的。

var arr = [];
arr["test"] = "something";
arr[arr.length]=arr["test"];

现在,您可以按键或按索引遍历一个键值数组。 而且length属性是可用的。