alvaropazz Ответов: 2

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


I wrote a function that checks what's the ratio of the number of positive, negative and null values inside an array in relation to its length.

I'd like receive some feedback on why my code's logic doesn't work.


Что я уже пробовал:

The code I wrote is the following:
```
function plusMinus(arr) {

    /**first I declare 3 variables to store the positive, 
    negative and null elements inside them*/

    let numPositive = [];
    let numNegative = [];
    let numZero = [];

    /**then I write a loop that will check whether 
    the elements of the input array are positive, negative or null,
    e.g. if the element[i] is positive, then the array 
    numPositive pushes the positive element[i] inside it, 
    and so on for the rest of the numbers and arrays*/

    for (let i=0; i<arr.length;i++){
        if (arr[i]>0){
            numPositive.push(arr[i]>0);
        }else if (arr[i]<0){
            numNegative.push(arr[i]<0);
        }else{
            numZero.push(arr[i]==0)
        }
    }

    /**finally, the ratios are given as a result of 
    the length of the pushed arrays and the length of the original array*/

    console.log(numPositive.length/arr.length);
    console.log(numNegative.length/arr.length);
    console.log(numZero.length/arr.length);
}
```

2 Ответов

Рейтинг:
1

Wendelius

Есть по крайней мере несколько проблем

Вы не помещаете значения в массивы. В данный момент вы нажимаете логическое значение, основанное на условии.

Другими словами вместо того чтобы

numPositive.push(arr[i]>0);

Вы должны использовать
numPositive.push(arr[i]);


Другое дело, что вы не проверяете нулевое значение, поэтому нули и нули относятся к одной и той же категории. Судя по описанию это не намеренно


Patrice T

Поскольку значения не используются повторно, это не имеет особого значения.

Рейтинг:
0

Patrice T

Ваш код слишком хорошо спроектирован !
Вы строите 3 массива, чтобы использовать только их длину, длина массива-это количество элементов в массиве, вам просто нужно посчитать их количество.
Таким образом, 3 числовых переменных и приращений достаточно, чтобы получить ответ.
С игрушечной программой на современном ПК это действительно не имеет значения, но на реальных программах, таких как интерактивные игры, это оказывает реальное влияние на fps из-за ресурсов свиньи.
Правильный вопрос заключается в том, действительно ли мне нужно делать это таким образом ? Могу ли я упростить ?
-----

Цитата:
Я хотел бы получить некоторую обратную связь о том, почему логика моего кода не работает.

Если ваш код не работает, вы должны объяснить, кто, в чем проблема.
-----
Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

Отладка JavaScript[^]
Хром Инструменты Разработчика  |  Сеть  |  Разработчики Google[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.