如何在forEach中删除对象中的重复值

时间:2017-04-16 16:09:35

标签: javascript angularjs foreach duplicates

我有一个像这样的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

3 个答案:

答案 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)
  )
)];
相关问题