【问题标题】:JavaScript: calculate the average of an odd numberJavaScript:计算奇数的平均值
【发布时间】:2018-03-15 11:28:39
【问题描述】:

我想从一个数字列表中计算奇数的平均值。我有一个计算平均值的起始代码,但我不知道如何从列表中只选择奇数?

这是我的代码:

var numberArray = [1,2,3,4,5,6], thisTotal=0,thisAverage=0;

for (var i=0; i<numberArray.length; i++) {
    thisTotal += numberArray[i];
}

thisAverage = (thisTotal/numberArray.length);

alert(thisAverage)

【问题讨论】:

  • 请完整分享您的代码
  • 不如改成i+=2而不是i++
  • 就像@tipsfedora 说的那样,然后除以奇数而不是numberArray.length
  • @tipsfedora 您的评论会做奇数索引,而不是奇数值。假设列表更改为所有偶数但 1 奇数并​​且您的解决方案失败。

标签: javascript arrays numbers average


【解决方案1】:

您可以使用filter 函数仅返回奇数:

var oddArray = numberArray.filter(function(val) {
  return val % 2 !== 0;
});

完整示例:

var numberArray = [1, 2, 3, 4, 5, 6];
var thisTotal = 0;
var thisAverage = 0;

var oddArray = numberArray.filter(function(val) {
  return val % 2 !== 0;
});
console.log(oddArray); // [1, 3, 5]

var thisTotal = oddArray.reduce(function(accumulator, currentValue) { return  accumulator + currentValue;
});
console.log(thisTotal); // 1 + 3 + 5 => 9

var thisAverage = thisTotal / oddArray.length;
console.log(thisAverage); // 9 / 3 => 3

【讨论】:

    【解决方案2】:

    var numberArray=[1,2,3,4,5,6], thisAverage=0,oddlength=0;
    
    for(var i=0;i<numberArray.length;i++)
    {
    if(numberArray[i]%2!==0){
    thisAverage+=numberArray[i];
    oddlength++;
    }
    }
    
    thisAverage=(thisAverage/oddlength);
    
    alert(thisAverage)

    【讨论】:

      【解决方案3】:

      嗯,你可以通过这个得到你想要的。

      var numberArray=[1,2,3,4,5,6], thisTotal=0,thisAverage=0;
      
      for(var i=0; i < 3; i++) {
        thisTotal += numberArray[i * 2];
      
        thisAverage= (thisTotal/numberArray.length);
      }
      
      console.log(thisAverage);
      

      或者如果你想要通用解决方案,使用这个。

      var numberArray=[1,2,3,4,5,6,7,8,...on and on], thisTotal=0,thisAverage=0;
      
      for(var i=0; i < Math.ceil(numberArray.length() / 2); i++) {
        thisTotal += numberArray[i * 2];
      
        thisAverage= (thisTotal/numberArray.length);
      }
      
      console.log(thisAverage);
      

      希望我的代码对你有帮助:)

      【讨论】:

        【解决方案4】:

        您可以使用函数reduce进行加法和计数。

        var numberArray = [1, 2, 3, 4, 5, 6],
            result = numberArray.reduce((a, n) => {
              if (n % 2 !== 0) {
                a.sum += n;
                a.count++;
              }
              
              return a;
            }, {sum: 0, count: 0}),
            average = result.sum / result.count;
        
        console.log(average);

        【讨论】:

          【解决方案5】:

          假设数字在一个数组中,你可以这样做:

          var numbers = [1, 2, 3, 4, 5, 6];
          var info = numbers.filter(function(n) { return n % 2 !== 0})
                           .reduce(function(acc, item) {
                               return {sum: acc.sum + item, count: acc.count + 1}
                           }, {sum: 0, count: 0});
          var avg = info.sum / info.count;
          

          本例使用filterreduce 方法,声明式更清晰。 filter 返回一个新数组,其中包含函数返回true 的项目,然后reduce 为每个项目更新一个“累加器”。累加器可以是任何东西,在这种情况下,它是一个包含数字总和及其计数的对象。对于每个项目,我们将当前编号添加到 sum 属性,并将 1 添加到 count。最后,我们只需将sum 除以count 即可。

          【讨论】:

            【解决方案6】:
            var acc = 0, oddCount = 0;
            for(var i = 0; i < numberArray.length; i++) {
                if(numberArray[i] % 2 !== 0) {
                  acc += numberArray[i];
                  oddCount++;
                }
            }
            
            return acc / oddCount;
            

            【讨论】:

              【解决方案7】:

              您可以创建一个新数组并将奇数存储在该数组中,然后您可以将您的逻辑应用于该数组。

              var a=[1,2,3,4,5,6,10,11];
              var ar=[];
              for (var i = 0; i < a.length; i++) {
                  if(a[i] % 2 !== 0) {
                      ar.push(a[i]);      
                  }  
              }
               console.log(ar);

              【讨论】:

                【解决方案8】:
                var numberArray=[1,2,3,4,5,6,7,8];
                        var count = 0;
                        var result = 0;
                        for (let i = 0; i <= (numberArray.length-1); i++)
                        {
                            if (numberArray[i] % 2 != 0)
                            {
                                result += numberArray[i];
                                count++;
                            }
                        }
                
                        alert(result / count);
                

                【讨论】:

                  猜你喜欢
                  • 2017-01-17
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-10-25
                  相关资源
                  最近更新 更多