我有一个像这样的forEach
angular.forEach(game.market, function (market) {
if (availableMarketGroups[market.group_id]) {
availableMarketGroups[market.group_id].count++;
}
});
我需要检查,如果availableMarketGroups [market.group_id]数字是重复的,那么忽略它!
例如我有id:a,b,b,b,c,d - >最终计数是6
我还需要检查,如果它是重复的,那么忽略它并得到最终的计数4
答案 0 :(得分:0)
您可以使用辅助结构来存储不同的group_id。
var summedGroupId = [];
angular.forEach(game.market, function (market) {
if (availableMarketGroups[market.group_id]) {
if (summedGroupId.indexOf(market.group_id) < 0) {
availableMarketGroups[market.group_id].count++;
summedGroupId.push(market.group_id);
}
}
});
答案 1 :(得分:0)
所以你想要
ids=[];
for(key in game.market){
if(game.market.hasOwnProperty(key)){
ids.push(game.market[key].group_id);
}
}
ids=ids.sort();
uniqueids=ids.filter((el,id)=>(!id||el!=ids[id-1]));
console.log(uniqueids.length);
新数组中的所有ID,它被排序和过滤为唯一,并且您可以轻松检查其长度。
答案 2 :(得分:0)
根据你的评论,我可以猜出你想要什么,但是可用的malletGroups [market.group_id]意味着你有可用的malloGroups结构:
{ someGroupId: someValue, someGroupId2: someValue2, ...}
看起来您希望这些值是唯一的,并针对当前游戏市场进行过滤。 (命名&#34; game.market&#34;并没有正确表明它实际上是市场&#34; s&#34;)
<强> 1。使用reduce
的方法const reducedMarketGroups = availableMarketGroups.reduce((prev, curr) => {
if (
game.markets.find(market => market.group_id === curr) &&
!prev.includes(curr)
) prev.push(curr);
return prev;
}, []);
<强> 2。使用Set
的方法const reducedMarketGroups = [...new Set(
availableMarketGroups.filter(marketGroup =>
game.markets.find(market => market.group_id === marketGroup)
)
)];