【问题标题】:How to target the negative numbers from an array, to get the sum of all the positive numbers?如何定位数组中的负数,以获得所有正数的总和?
【发布时间】:2021-01-02 22:14:25
【问题描述】:

我试图弄清楚如何在数组中定位负数。 我有这个:

function SummPositive( array ) {

}
SummPositive( [ 1, 2, 3, 4, 5, -2, 23, -1, -13, 10,-52 ] );

这是一个包含负数和正数的数组。当我不知道数组中有多少个负数时,如何定位(忽略)数组中的所有负数?

例如,我试图遍历整个数组,找到正数,将它们存储在另一个数组中,然后得到总和:(1+2+3+4+5+10+23)

如果可能的话,我只想用原生 js 来做这个。

【问题讨论】:

    标签: javascript arrays numbers


    【解决方案1】:

    只需创建一个条件来检查它是正数还是负数,然后定义一个空数组negatives,如果数字是负数,则将其推入负数数组,如果是正数,则将其添加到sum 变量中,检查下面的工作示例.

    function SummPositive( numbers ) {
      var negatives = [];
      var sum = 0;
    
      for(var i = 0; i < numbers.length; i++) {
        if(numbers[i] < 0) {
          negatives.push(numbers[i]);
        }else{
          sum += numbers[i];
        }
      }
    
      console.log(negatives);
    
      return sum;
    }
    
    var sum_result = SummPositive( [ 1, 2, 3, 4, 5, -2, 23, -1, -13, 10,-52 ] );
    
    console.log(sum_result);

    【讨论】:

    • Don't use a word array as variable since it's a reserved word 实际上不是。大写 A Array 是保留的,但它也用于 JS 中的实际数组。这并不是说它应该被使用——一般来说,最好不要提及你的变量在类型方面持有什么,除非有必要。只需调用它numbers,它是否是一个数组都没有关系。如果您希望它更具描述性,mixedNumbers 将更加明确为什么您将它们分成负数和其他。
    【解决方案2】:

    您可以只过滤数组中的正数,然后添加所有值。

    var array = [ 1, 2, 3, 4, 5, -2, 23, -1, -13, 10, -52 ],
        positive = array.filter(function (a) { return a >= 0; }),
        sum = positive.reduce(function (a, b) { return a + b; });
    
    console.log(sum);

    或者使用单个循环

    var array = [ 1, 2, 3, 4, 5, -2, 23, -1, -13, 10, -52 ],
        sum = array.reduce(function (r, a) {
            return a > 0 ? r + a : r;
        }, 0);
    
    console.log(sum);

    使用方法:

    • Array#filter:

      filter() 方法创建一个新数组,其中包含所有通过所提供函数实现的测试的元素。

    • Array#reduce:

      reduce() 方法对累加器和数组的每个值(从左到右)应用函数以将其减少为单个值。

    【讨论】:

      【解决方案3】:

      我认为你的意思是:

      function SummPositive( array ) {
          var sum = 0;
          for(var i = 0; i < array.length; i++) {
              if(array[i] > 0) {
                  sum += array[i];
              }
          }
          return sum;
      }
      

      它将数组中的所有正数相加并返回总和。

      【讨论】:

        【解决方案4】:

        这将删除所有负数并将数组中的剩余值相加。

        var totalN = 0;
        for(var ctr = 0; ctr < summPositive.length; ctr++){
            if(summPositive[ctr] >= 0 ){totalN += summPositive[ctr];
            }
        }
        

        【讨论】:

        • 这个循环实际上只会给你最后一个负数totalN
        • 等号缺少加号运算符。
        【解决方案5】:

        作为替代方案,您可以使用 ES6 的最新功能:

        let arr = [1, 3, 1, -2];
        let sum = arr.reduce(((r, x) => x > 0 ?  x + r: r), 0);
        console.log(sum)

        【讨论】:

          【解决方案6】:

          您可以简单地过滤数组以找到正数

              function sumPositive(arr){
                var positiveArray = arr.filter(function(x){return x > 0});// getting positive.
                var sum = 0;  positiveArray.forEach(function(x){ sum += x;});
               return sum;
            }
          

          【讨论】:

            【解决方案7】:
            function SummPositive(array) {
              return array.filter(x => x>=0).reduce((a, c) => a + c, 0);
            }
            

            【讨论】:

            • 请解释这如何改进现有答案。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-11-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多