我实现了这个答案的代码:javascript group by in array
我稍微更改了代码,因此数组中有更多的产品详细信息:
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很新,所以一个例子就可以了。
答案 0 :(得分: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;
}, {});
};