2011-12-16 97 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 2016-03-04 23:57:39

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