Используйте вход как массив, затем умножьте на значение индекса и получите сумму - PullRequest
0 голосов
/ 02 апреля 2020

Извините, если я неправильно понял мои термины, я новичок в этом!

Я пытаюсь сделать так, чтобы пользователь ввел 4 цифры, поместил их в массив и затем сам умножил эти цифры. , затем верните сумму. Пример:

Пользовательский ввод 1234
Что я хочу сделать: [1, 2, 3, 4]
Математика, которую я хочу: (1 * 1) + (2 * 2) + (3 * 3) + (4 * 4)
вывод: 30

Вот что я сделал:

arr = [];
var number= parseInt(document.getElementById("number"));
arr.push(number);
var sum = 0;

for (var i = 0; i< arr.length; i++){
 sum += (arr[i]*arr[i]) ;
}
console.log(sum);  

Куда я иду не так? Спасибо!

Ответы [ 7 ]

0 голосов
/ 02 апреля 2020

попробуйте это:

const input = document.getElementById("number");
const arr = [...input.toString()];
const sum = arr.reduce((total, item) => {
  const num = parseInt(item);
  const multipy = num * num;
  return (total += multipy);
}, 0);

console.log(sum);
0 голосов
/ 03 апреля 2020

Вот ответ (пожалуйста, нажмите на Run code Snippet)

function getTotal() {
  arr = [];
  // you forget to put .value here
  var numbersAsAString = document.getElementById('number').value;
  // => 1234

  // and you need to take each digit from the input you insert
  for (var i = 0; i < numbersAsAString.length; i++) {
    // and as you did parseInt to convert string to number
    arr.push(parseInt(numbersAsAString[i]));
  }
  // console.log(arr); // [1,2,3,4]
  var sum = 0;

  for (var i = 0; i < arr.length; i++) {
    sum += arr[i] * arr[i];
  }
  // console.log(sum);
  document.getElementById('answer').innerHTML="Answer will be here: "+sum;
}

// If you need any explanation, or this is not what you are asking about, please comment on my answer
<html>

<head>
  <title>StackOverFlow &#127831;</title>
  <link rel="shortcut icon" type="image/x-icon" href="https://image.flaticon.com/icons/png/512/2057/2057586.png" />
</head>

<body>
  <h3>Stack Over Flow &#127831;</h3>

  <input id="number" type="text" value="1234">

  <button onclick="getTotal()">get the answer</button>
  <p id="answer">Answer will be here: </p>
</body>

</html>

Если вам нужно какое-либо объяснение, или это не то, о чем вы спрашиваете, пожалуйста, прокомментируйте мой ответ

0 голосов
/ 02 апреля 2020

Попробуйте это.

arr = [];
var number= document.getElementById("number");
arr = number.split("");// Splits the input into a string array like ["1","2","3","4"]
var sum = 0;

for (var i = 0; i< arr.length; i++){
 sum += (arr[i]*arr[i]) ;
}
console.log(sum);

Примечание: JS очень свободно, когда пытается проверить тип ввода. Предполагается, что входные данные всегда имеют целочисленный формат.

0 голосов
/ 02 апреля 2020

Цель этого научить вас loop, а не array и slice. Вы можете сделать это, используя простые while loop и mathematics.

// var number = parseInt(document.getElementById("number"));

var number = 1234;
let sum = 0;
for (; number > 0; ) {
  const x = Math.floor(number % 10);
  sum += x * x;
  number = Math.floor(number / 10);
}
console.log(sum);
0 голосов
/ 02 апреля 2020

Я предоставил полный пример с комментариями. Я надеюсь, что это то, что вы ищете.

const doMagic=(numberInput)=>{
  // if it doesn't have value, return false
  if (!numberInput && numberInput.value) return false;
  // split input value by each character
  const arr = numberInput.value.split('');
  let sum = 0;
  for (var i = 0; i < arr.length; i++)
    sum += (arr[i]*arr[i]);
  return sum;
}

// get element, not value
const numberInput = document.getElementById("number");
// on elements value change call our function
numberInput.addEventListener('change',()=>
  console.log(doMagic(numberInput))
);
<input id="number" type="number"/>
0 голосов
/ 02 апреля 2020

Вы можете использовать разборчивый синтаксис for - of -

const numbers = [ 1, 2, 3, 4 ]

let result = 0

for (const num of numbers)
  result = result + (num * num)

console.log(result) // 30

Вы также можете использовать Array.prototype.reduce -

const numbers = [ 1, 2, 3, 4 ]

const result = numbers.reduce((result, num) => result + (num * num), 0)

console.log(result) // 30
0 голосов
/ 02 апреля 2020

arr - это массив с одним элементом, целым числом, введенным пользователем.

Вам необходимо разделить ввод на отдельные числа для каждого di git.

Также , вы должны использовать свойство .value, чтобы получить то, что ввел пользователь.

arr = [];
var number = document.getElementById("number").value;
for (var i = 0; i < number.length; i++) {
    arr.push(parseInt(number[i]));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...