使用键值对获取数组长度,JavaScript

3
我编写了这段代码,它应该解析给定的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个回答

12

创建的 "params" 数组是一个关联数组。如果你想获取关联数组的长度,请使用

Object.keys(params).length;

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

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

0

这里有一些奇怪的东西。 这实际上是相互关联的。

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

现在你有一个键值数组,可以通过键或索引进行循环遍历。同时,长度属性是可用的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接