array length with key-value, js

China☆狼群 提交于 2021-01-27 14:24:48

问题


I wrote this piece of code, that should parse the given paramUnparsed (which should be an array in the form: [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;  
}

How can I do this, and still determine the length of the array that I'm creating? I always get '0' on the 'DEBUG 2' printout...


回答1:


The "params" array which is created is an associative array. If you want to get the length of the associative array use

Object.keys(params).length;



回答2:


You are creating an array, but you are not using it as an array. You are using it as an object, which works as an array is also an object, but it means that the length of the array remains zero as you are not adding any array items.

Create an object, and count the items that you add to get the count:

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



回答3:


You're not really building an array. Arrays shouldn't have keys. You can use an object like this:

var params = {};

but that wouldn't solve your .length issue.

What you can also do is building an array of objects, where each object contains a key and value. Something like this:

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



回答4:


Here is some thing odd. This actually holds together.

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

Now you have a key value array you kay loop through by key or by index. Also the length property is abailable.



来源:https://stackoverflow.com/questions/8532994/array-length-with-key-value-js

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!