2017-04-18 37 views
0
var availableMarketGroups = {}; 

angular.forEach(function (market) { 

    if (availableMarketGroups[market.group_id]) { // market.group_id is not sorted id 
     availableMarketGroups[market.group_id].count++; 
    } 
}); 

market.group_id - 数,不排序,有时其重复 availableMarketGroups [market.group_id] .Count之间的 - 它的长度如何忽略if语句中的重复值?

允许查看图像以获得更多信息。

市场组的数量并不代表实际的市场数量。

availableMarketGroups [market.group_id] .count show - 15,但实际上它应该是5(5组),因为market.group_id是重复的。

enter image description here

在if语句我怎么可以忽略重复market.group_id值?

+0

似乎一切都是独一无二的。更新你的JSON和期望的outptut – Aravind

+0

@Aravind json来自swarm,websocket –

回答

0
var availableMarketGroups = {}; 
var groupsProcessed = []; 

angular.forEach(availableMarketGroups, function(marketGroup) { 
    if (groupsProcessed.indexOf(marketGroup.group_id) < 0) { 
     groupsProcessed.push(marketGroup.group_id); 
     availableMarketGroups[market.group_id].count++; 
    } 
}); 
0

对唯一数组元素进行计数的答案是使一个函数如下所示。

var counts = {}; 
for (var i = 0; i < arr.length; i++) { 
    counts[arr[i]] = 1 + (counts[arr[i]] || 0); 
} 

它将返回数组中元素的唯一计数。

参考:Count unique elements in array without sorting

0

硬盘没有你的数据说。一般来说,你应该能够reduce下来的独特的group_id S:

const uniqueGroups = markets.reduce(function(set, market) { 
    if (!set.has(market.group_id)) { 
    set.add(market.group_id); 
    } 
    return set; 
}, new Set()); 

console.log('Unique group count: ', uniqueGroups.size); 
0

您可以使用下划线:

var newObj = _.uniq(market, function(p){ return p.group_id; });