0

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

负整数:-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);

4

6 回答 6

0

问题是当它应该是 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);

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

于 2019-11-30T21:58:30.123 回答
0

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

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
于 2019-11-30T22:03:38.253 回答
0

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

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

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

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

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

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

于 2019-11-30T22:07:23.303 回答
0

嘿,我可以帮助你吗:)

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

If(first == true){ 
  //don t print the „ ,“
  first = false
}else {
 // print it
}
于 2019-11-30T22:09:31.553 回答
0

使用filter,join和的更简单方法reduce

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

于 2019-11-30T22:16:59.193 回答
0

您的代码是用 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>

于 2019-11-30T22:17:45.290 回答