2016-07-19 10 views
0

多次元配列を作成するスクリプトを作成しようとしています。これは通常は問題ではないはずですが、何らかの理由ですべてがここで失敗しています。理由はわかりません。インデックスが設定されているにもかかわらず、配列にnullがあります

function getProducts(products){ 
    var allProducts = new Array(); 
    for(var p in products) if(products[p]){ 
     var groupName = products[p].otherGroupName; 
     var code = (products[p].code.split("."))[0]; 
     if(!(products[p].commonName.length==0 && groupName=="")){ 
      if(groupName=="") { 
       groupName="Custom Admin Products"; 
      } 
      if(!(groupName in allProducts)) { 
       allProducts[groupName] = new Array(); 
      } 
      var np = {}; 
      np.commonName = products[p].commonName; 
      np.code = code; 
      allProducts[groupName][np.code] = np; 
     } 
    } 
    console.log(allProducts); 
} 

productsの引数がオブジェクトです。 2行目から最後の行までが表示され、配列をログに記録しようとしていますが、ログには'[]'と表示されます。私がallProducts[groupName][np.code]を記録すると、それは私に構造を与えます。だから私は完全に失われている。

+1

?あなたは 'ヌル'か構造物を得ていますか?また、実際に配列を正しく使用しているわけでもありません。動的キー( 'allProducts [groupName] = new Array()'、 'allProducts [groupName] [np.code] = np')を割り当てると、配列をオブジェクトとして使うだけです。 –

+0

arrayの代わりにオブジェクトを使う: 'allProducts = {};' ..... 'allProducts [groupName] = {};' –

答えて

1

PHPのような他の動的言語のような「連想配列」が必要な場合、Arrayオブジェクトは数値インデックスを持たなければなりません。代わりにnew Array()またはそれと同じであると宣言するa = []a = {}を使用してみてください。これにより、「名前付き」索引を使用できます。

また、.map()を使用すると、コードの読みやすさが少し向上する可能性があるため、必要に応じて調整されているようです。ここではより多くの背景については

は、ArrayのMDNドキュメントです:

一部の人々はあなたが連想配列として配列を使うべきではないと思います。いずれにしても、代わりにプレーンオブジェクトを使用できますが、独自の警告が付いています。それである

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#Description

関連する問題