Печатайте только отрицательные числа и их сумму, выполняя циклы и массивы - PullRequest
0 голосов
/ 01 декабря 2019

Мне нужна помощь с программой, я должен использовать цикл для вывода всех отрицательных целых чисел и их суммы. Я должен использовать только базовый метод.

Отрицательные целые числа: -2, -1, -7 <---- // Нет запятой в конце. </p>

Сумма отрицательных чисел: -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);

Ответы [ 6 ]

0 голосов
/ 01 декабря 2019

Ваш код написан с синтаксисом и подходом с 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>
0 голосов
/ 01 декабря 2019

Более простой подход с использованием 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)
);
0 голосов
/ 01 декабря 2019

Слушай, могу я чем-нибудь помочь тебе?)

Просто возьми bool типа «first», который проверяет, является ли он первым предметом, и поставь «,» перед своим номером. Вы устанавливаете его в true, после этого вы собираете stf как:

If(first == true){ 
  //don t print the „ ,“
  first = false
}else {
 // print it
}
0 голосов
/ 01 декабря 2019

Ваша логика заключается в том, что каждый раз, когда вы делаете цикл и находите следующее отрицательное число:

  1. Запишите его.
  2. Если записанное число не было последним элементом массива,напишите ",".

Во-первых, вышеприведенный шаг 2 не имеет большого логического смысла, поскольку, хотя число может быть не последним элементом массива, оно вполне может быть последним отрицательным номер массива. Но к настоящему времени вы, вероятно, понимаете, что это может произойти, иначе вы бы не разместили этот вопрос.

Что имеет больше смысла, если иметь логический флаг с именем didOutput, изначально установленный в false, представляющий, имели ли вы когда-либовыводится любое отрицательное число. Это вы установили вне цикла. Тогда цикл выглядит так в псевдокоде:

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

Таким образом, на каждой итерации цикла вы записываете запятую перед , записывая следующее число, если и только если выВыписали хоть один номер. Вам нужно всего лишь одно или два изменения строки в существующем коде, которые я мог бы сделать, но это шаблон, который будет повторяться снова и снова, и его важно понимать, поэтому вы должны попытаться включить его самостоятельно в свой код.

0 голосов
/ 01 декабря 2019

Вы можете написать намного проще. Сначала отфильтруйте все отрицательные числа, а затем сумму.

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
0 голосов
/ 01 декабря 2019

Проблема в том, что вы проверяете позицию только 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);

Приведенный выше код отлично работает для меня, если у вас есть какие-либо вопросы, не стесняйтесь спрашивать меня!

...