2011-12-16 11 views
3

このコードは、与えられたparamUnparsedを解析する必要があります(形式は[key1 = val1、key2 = val2、..、keyn = valn ])。キーの値を持つ配列の長さ、js

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'を得ます...

答えて

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

作成される「params」配列は、連想配列です。 あなたが連想配列の長さは、あなたは、配列を作成している

Object.keys(params).length; 
+0

甘いです!ありがとう!! – Sathesh

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; 
} 
関連する問題