【问题标题】:How can i ignore duplicate values in if statement?如何忽略 if 语句中的重复值?
【发布时间】:2017-09-13 16:55:35
【问题描述】:
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 - 它的长度

让我们看看图片了解更多信息。

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

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

如何忽略 if 语句中重复的 market.group_id 值?

【问题讨论】:

  • 似乎一切都是独一无二的。更新您的 json 和预期输出
  • @Aravind json 来自 swarm , websocket

标签: javascript angularjs foreach duplicates


【解决方案1】:
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++;
    }
});

【讨论】:

    【解决方案2】:

    计算唯一数组元素的答案是创建一个如下所示的函数。

    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

    【讨论】:

      【解决方案3】:

      没有您的数据很难说。一般来说,你应该可以将reduce这个归结为group_ids的唯一Set:

      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);
      

      【讨论】:

        【解决方案4】:

        你可以使用下划线:

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

        【讨论】:

          猜你喜欢
          • 2020-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-06
          • 1970-01-01
          • 2017-05-25
          相关资源
          最近更新 更多