2016-07-19 98 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的參數是一個對象。您還會在倒數第二行看到,我正在嘗試記錄數組,並且應該填充它,但它在日誌中顯示'[]'。如果我登錄allProducts[groupName][np.code]它給了我一個結構。所以我完全失去了。

+1

是哪一個?你得到'null'還是一個結構?另外,你並沒有真正地使用數組。當你分配動態鍵('allProducts [groupName] = new Array()','allProducts [groupName] [np.code] = np')時,你只需要使用一個數組作爲對象。 –

+0

使用對象代替數組:'allProducts = {};'.....'allProducts [groupName] = {};'' –

回答

1

如果您希望像「PHP」等其他動態語言一樣使用「關聯數組」,則應使用數字索引,您應該使用Object。而是將其聲明爲new Array()或哪個是a = []嘗試使用a = {}。這將允許您使用「已命名」索引。

此外,使用.map()似乎適應您的必要性,這可能會稍微改善代碼易讀性。

欲瞭解更多的背景這裏是陣列的MDN文檔:

有些人認爲你不應該使用數組作爲一個關聯數組。在任何情況下,您都可以使用普通對象,儘管這樣做有其自身的注意事項。

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

相關問題