2016-10-19 59 views
-1

我實現了代碼這樣的回答:javascript group by in arrayJavaScript的使用對象長度數組是0

我改變了代碼那麼一點點有數組中更多產品詳細:

var mapByShop = function(arr, groupName) { 
     return arr.reduce(function(result, item) { 
     result[item[groupName]] = result[item[groupName]] || []; 
     result[item[groupName]][item["productId"]] = item; 
      return result; 
     }, {}); 
    }; 
    console.log("Response", response.data); 

    $scope.productList = mapByShop(response.data, "shopName"); 
    console.log("productList", $scope.productList); 

的代碼工作正常它會創建一個帶有商品名稱的對象與數組對象的數組。例如,該陣列是這樣的:

Shopname 1:Array[0] 
    57ab0360741496001e37586c:Object 
     image:"http://pathtoimage.nl/image.jpg" 
     name:"Product Name" 
     price:32.23 
     productId:"57ab0360741496001e37586c" 
     productNumber:"ProductNumer 123" 
     quantity:1 
     shopId:"56699123a9c7a38740a31251" 
     shopName:"Shopname 1" 
    57ab0360741496001e375867:Object 
     {same properties as object above} 

Shopname 2:Array[0] 
    57bc15ad732b2de02145fe8e:Object 
     {same properties as object above} 
    57bc15ad732b2de02145fe8f:Object 
     {same properties as object above} 
    57bc15ad732b2de02145fe90:Object 
     {same properties as object above} 
    57d157d10b90631c31466329:Object 
     {same properties as object above} 
    57d158fe0b90631c31466331:Object 
     {same properties as object above} 

正如你所看到的,Shopnames後,有一個符號(從控制檯在Chrome中複製),它說Array[0]。我想用角ng-repeat來顯示這個數組的內容,但是這也不起作用。

我該如何解決這個問題?我很新的JavaScript,所以一個例子會很好。

+1

數組[0]意味着數組中沒有值類似於var b = new Array(); console.log(b)==> Array [0] – abhirathore2006

+1

result [item [groupName]] = result [item [groupName]] || []; result [item [groupName]] [item [「productId」]] = item;' - 你濫用數組,或者誤解它們......或者使用{}而不是[]來創建一個數組對象,然後忘記陣列 –

+0

是的,{}是訣竅! – NVO

回答

0

使用{}修復了這個問題。

var mapByShop = function(arr, groupName) { 
        return arr.reduce(function(result, item) { 
        result[item[groupName]] = result[item[groupName]] || {}; 
        result[item[groupName]][item["productId"]] = item; 
         return result; 
        }, {}); 
      };