仅打印负数及其总和 aplaying 循环和数组

Print only negative numbers and its sum aplaying loops and arrays

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

负整数:-2, -1, -7 <----//末尾无逗号。

负数求和:-10

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

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

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

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

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

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

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

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

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

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

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

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

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

嘿,我可以帮你:)

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

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

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

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

在您的情况下,最好的方法是使用 Array.filter() method, which results in a second array of values that match some criteria you establish (negative numbers in this case). Since the results will be in an array, the Array.join() method will produce a comma separated string result where you don't have to worry about the comma placement. Then, you can sum the resulting array up with 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>