2013-05-06 102 views
1

我有一個Perl循環,我正在循環並構建一個JavaScript數組。當我啓動JavaScript數組時,JavaScript數組的長度爲0;然而,它在2001年第一次快速增長到1001,在第三次增長到了4001。我期待的長度是3!以下是代碼和perl hash後面的代碼。Perl哈希JavaScript數組長度爆炸

代碼

var offers = []; 
% foreach my $amount (keys %$offers) { 
    offers['<% $amount %>'] = []; 
    console.log(offers.length); 
% } 

Perl的哈希

{ 
    '1000'=>{ 
     '6'=>{ 
      'payment'=>'173.49', 
      'fee'=>'2', 
      'APR'=>'13.9' 
     }, 
     '4'=>{ 
      'payment'=>'256.23', 
      'fee'=>'2', 
      'APR'=>'11.9' 
     } 
    }, 
    '2000'=>{ 
     '6'=>{ 
      'payment'=>'346.98', 
      'fee'=>'2', 
      'APR'=>'13.9' 
     }, 
     '4'=>{ 
      'payment'=>'512.46', 
      'fee'=>'2', 
      'APR'=>'11.9' 
     } 
    }, 
    '4000'=>{ 
     '6'=>{ 
      'payment'=>'693.96', 
      'fee'=>'2', 
      'APR'=>'13.9' 
     }, 
     '4'=>{ 
      'payment'=>'1024.92', 
      'fee'=>'2', 
      'APR'=>'11.9' 
     } 
    } 
}; 
+0

好了,不顯示任何東西,JS數組有一個非常奇怪的概念。試着看看實際的指數數量:'var indices; for(key in array){indices.push(key)} console.log(indices.length)' – amon 2013-05-06 19:07:21

+1

第一遍提供[1000] = []'。這將創建一個長度爲1001的數組,因爲它由索引0到1000組成。也許您應該使用對象而不是數組。 – Barmar 2013-05-06 19:09:43

+0

@Barmar,如何將建議轉換這個對象?在Perl中使用JSON編碼,或者在JavaScript中手動構建對象? – 2013-05-06 21:10:37

回答

1

嘗試

var offers = []; 
% foreach my $amount (keys %$offers) { 
    offers.push('<% $amount %>'); 
    console.log(offers.length); 
% } 
+0

我不確定這會起作用,因爲它需要是多維的。 – 2013-05-06 21:09:29

1

我想你想要的是一個關聯數組/對象。如果您希望將數據通過代碼如offers['1000']被識別,但沒有1000元,那麼你只需要初始化報價是這樣的:

var offers = {}; 

,並留下您的代碼保持不變的其餘部分。再也不會有長度屬性,但只會爲每個存儲的項目創建一個條目而不是1,000個。

你可以做這樣通過數據迭代:

var offer; 
for (offer in offers) { 
/* do something with offers[offer] here */ 
}