问题
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