JavaScript: как сделать l oop, добавив значения переменных с 1, 2, 3, ... в конце? - PullRequest
0 голосов
/ 21 февраля 2020

Я начинающий JavaScript пользователь. Я хотел бы рассчитать оценку 15 вопросов из программы. Что мне нужно: я поместил полученное значение в JSq1, JSq2 и т. Д. c. затем я складываю их и делю на общий вопрос и округляю баллы. Я могу выложить все во многие строки, но это не выглядит эффективным. Я пытаюсь найти способ использовать l oop, чтобы получить все тот же результат.

Пожалуйста, помогите.

СПАСИБО

<script language = "JavaScript">
// the following may work
var JSq1 =Varq1score.getValue();
var JSq2 =Varq2score.getValue();
var JSq3 =Varq3score.getValue();
var JSq4 =Varq4score.getValue();
var JSq5 =Varq5score.getValue();
var JSq6 =Varq6score.getValue();
var JSq7 =Varq7score.getValue();
var JSq8 =Varq8score.getValue();
var JSq9 =Varq9score.getValue();
var JSq10 =Varq10score.getValue();
var JSq11 =Varq11score.getValue();
var JSq12 =Varq12score.getValue();
var JSq13 =Varq13score.getValue();
var JSq14 =Varq14score.getValue();
var JSq15 =Varq15score.getValue();
var totalScore = JSq1 + JSq2 + JSq3 + ...
var totalQuestion = 15
var finalScore = parseFloat(totalScore/totalQuestion*100).toFixed(0);

// I'd like to do the following but don't know how to specify JSq1, JSq2, etc in a loop so I don't have to repeat the lines so many times.
var totalQ = 15;
for (i = 0; i <= totalQ ; i++) {
  var JSq+[i] = "Varq"+ i + "score.getValue()";
}


for (i = 0; i <= totalQ ; i++) {
  var totalScore = totalScore + JSq + [i];
}

...
</script>

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

1) Построить объект all_vars со всеми переменными. (Здесь, с сокращенным свойством объекта, { JSq1 } будет эквивалентно { JSq1: Varq1score.getValue() }
2). Используйте Object.values, чтобы получить значения вышеуказанного объекта в массиве.
3) Используйте любой l oop (в данном случае мы используем Reduce) для динамического построения общего счета.

С этими небольшими изменениями в вашем текущем коде вы можете достичь результата. Проверьте следующий пример кода.

var JSq1 = 3;
var JSq2 = 3;
var JSq3 = 3;
var JSq4 = 3;
var JSq5 = 3;
var JSq6 = 3;
var JSq7 = 3;
var JSq8 = 3;
var JSq9 = 3;
var JSq10 = 3;
var JSq11 = 3;
var JSq12 = 3;
var JSq13 = 3;
var JSq14 = 3;
var JSq15 = 3;

var all_vars = {
  JSq1,
  JSq2,
  JSq3,
  JSq4,
  JSq5,
  JSq6,
  JSq7,
  JSq8,
  JSq9,
  JSq10,
  JSq11,
  JSq12,
  JSq13,
  JSq14,
  JSq15
};
var totalScore = Object.values(all_vars).reduce((sum, jsq) => sum + jsq, 0);
var totalQuestion = 15;
var finalScore = parseFloat((totalScore / totalQuestion) * 100).toFixed(0);

console.log(finalScore)
0 голосов
/ 21 февраля 2020

Вообще говоря, если вы хотите взять набор чисел и суммировать их, Array.reduce является отличным инструментом для этой работы.

Вот пример того, как Array.reduce суммирует массив чисел:

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const result = numbers.reduce( (acc, curr) => curr += acc );
console.log('The total is', result);

Судя по внешнему виду вашего кода, вы просматриваете данное число (totalQ) и строите итеративный объект из строк. Непонятно, как вы ожидаете, что это сработает, или что вы пытаетесь сделать с этими логами c.

Если вы можете объяснить более подробно, что именно является Varq1score.getValue() при этом было бы легче дать вам ответ, который более приспособлен к вашему текущему коду. Если мы сделаем предположение, что JSq1 - JSq15 - все числа, я бы предложил переформатировать код так, чтобы он представлял собой массив чисел в переменной single , в отличие от каждого числа, получающего своего собственного переменная (что усложняет итерацию и сокращение).

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...