【问题标题】:Print only negative numbers and its sum aplaying loops and arrays仅打印负数及其和循环和数组
【发布时间】:2019-11-30 21:48:55
【问题描述】:

我需要程序方面的帮助,我必须使用循环来输出所有负整数及其总和。我应该只使用基本方法。

负整数:-2、-1、-7 ----//末尾没有逗号。

负数之和:-10

当我运行我的程序时,最后一个整数末尾有一个额外的逗号,我不能用“if (i != array.length-1)”取出它,因为我数组中的最后一个元素是正数,但是循环分析有一个空元素。我如何以合乎逻辑的方式删除该逗号。结果必须在以逗号分隔的循环内打印:(“,”)。

function negativeArray(array)
    {
        document.write("Negative integers: ")
        for (var i = 0, count = 0; i < array.length; i++) 
        {
            if (array[i] != undefined && array[i] < 0){
                    document.write(array[i]);
                    count += array[i];
                    if (i != array.length-1) document.write(", ")}
        }
            document.write( "<br>Sum negative nums: " + count)
    }
        var items = [1, -2, 3, 4 -5, 6, -7, 8];
        negativeArray(items);

【问题讨论】:

    标签: javascript arrays for-loop if-statement negative-integer


    【解决方案1】:

    使用filterjoinreduce 的更简单方法:

    var items = [1, -2, 3, 4 - 5, 6, -7, 8];
    
    document.write(
      "Negative integers: ",
      items.filter(item => item < 0).join(", ")
    );
    
    document.write(
      "<br>Sum negative nums: ",
      items.reduce((acc, current) => acc + (current < 0 ? current : 0), 0)
    );

    【讨论】:

      【解决方案2】:

      问题在于,当它应该是 Array.length-2 时,您只检查了 Array.length-1 的位置。这是有效的代码示例:

      function negativeArray(array)
          {
              document.write("Negative integers: ")
              for (var i = 0, count = 0; i < array.length; i++) 
              {
                  if (array[i] != undefined && array[i] < 0){
                          document.write(array[i]);
                          count += array[i];
                          if (i != array.length-2) {
                              document.write(", ");
                          }
                  }
              }
                  document.write( "<br>Sum negative nums: " + count)
          }
              var items = [1, -2, 3, 4 -5, 6, -7, 8];
              negativeArray(items);
      

      上面的代码非常适合我,如果您有任何问题,请随时问我!

      【讨论】:

      • 是的,但是数组可以改变,如果最后一个是负数,那将不起作用。
      【解决方案3】:

      你可以写得更轻松。先过滤所有负数,然后求和。

      var items = [1, -2, 3, 4 -5, 6, -7, 8];
      
      function negativeArray(array) {
        return array.filter(item => item < 0).reduce((sum, current) => sum + current, 0)
      }
          console.log(negativeArray(items)); // -10
      

      【讨论】:

      • 我必须使用一个循环,用逗号和空格分隔每个数字,该过滤器将翻转togueter。
      【解决方案4】:

      嘿,我可以帮助你吗:)

      只要得到一个像“first”这样的布尔值,它会检查它是否是第一项并在你的号码前放置“,”。您将其设置为 true,然后您构建 stf,如下所示:

      If(first == true){ 
        //don t print the „ ,“
        first = false
      }else {
       // print it
      }
      

      【讨论】:

        【解决方案5】:

        您的逻辑是每次循环并找到下一个负数:

        1. 写出来。
        2. 如果写出的数字不是数组的最后一个元素,则写“,”。

        首先,上面的步骤 2 没有多大逻辑意义,因为即使该数字可能不是数组的最后一个元素,它也可能是数组的最后一个 数字。但是现在您可能已经意识到这可能会发生,否则您不会发布这个问题。

        如果将一个名为 didOutput 的布尔标志最初设置为 false 表示您是否曾经输出过任何负数,这更有意义。这是您在循环之外设置的。然后循环在伪代码中看起来像这样:

        didOutput = false;
        loop {
           get next negative number;
           if didOutput then {
               write(", ");
           }
           write number;
           didOutput = true;
        }
        

        以这种方式,在每次循环迭代中,当且仅当您曾经写出至少一个数字时,您才写出逗号 before 写出下一个数字。您只需要对现有代码进行一两行更改,而我本可以这样做,但这种模式会反复出现并且理解起来很重要,因此您应该尝试自己将其合并到您的代码中。

        【讨论】:

          【解决方案6】:

          您的代码是用 1995 年的语法和方法编写的。document.write() 不应该像您使用它那样用于产生结果,而不是 for 循环,可以使用多种方法迭代数组.

          在您的情况下,最好的方法是使用 Array.filter() 方法遍历原始数组,这会产生与您建立的某些标准匹配的第二个值数组(在这种情况下为负数)。由于结果将在一个数组中,Array.join() 方法将产生一个逗号分隔的字符串结果,您不必担心逗号的位置。然后,您可以将结果数组与Array.reduce() 相加

          var items = [1, -2, 3, 4 -5, 6, -7, 8];
          
          function negativeArray(array) {
            // Use the Array.filter() method to loop
            // over an array and produce a new array with 
            // your desired values
            let results = array.filter(function(item){
              return item < 0;
            });
            // .join() will return a comma separated string of the array values
            document.getElementById("negatives").textContent = results.join(", ");
            
            // .reduce() will loop over the array and return a single value based on the function passed
            document.getElementById("sum").textContent = results.reduce(function(x,y){ return x + y });
          }
          
          negativeArray(items);
          <!-- Don't use document.write() to add results to the page.
               Instead, set up an HTML placeholder for results and populate
               it dynamically. -->
          <div>Negative Integers:  <span id="negatives"></span></div>
          <div>Sum of negatives:  <span id="sum"></span></div>

          【讨论】:

          • 我必须使用一个循环,用逗号和空格分隔每个数字,该过滤器将翻转togueter。这个 ald 方法是一个要求
          • @Chucho .join() 方法允许你使用任何你想要的分隔符,所以我已经更新为逗号和空格。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-07
          • 1970-01-01
          • 2014-01-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多