Как умножить постоянный массив на массив ввода пользователя? - PullRequest
0 голосов
/ 03 апреля 2020

Как применить мой константный массив к массиву, введенному пользователем, и получить сумму?

Пользователь всегда вводит 6 цифр, но константа составляет 5 цифр

Пример

[5, 7, 3, 5, 2] - мой постоянный массив, который я умножаю на

, пользователь вводит 837465

превращается в [8, 3,7 , 4,6,5] (но я хочу, чтобы 5 игнорировалось)

умножить на массив констант (не включая последний элемент) и получить сумму:

(8 * 5) + (3 * 7) + (7 * 3) + (4 * 5) + (6 * 2) = 114

const arr = [5, 7, 3, 5, 2];
var arr2 = [];
var num = parseInt(document.getElementById("yourNumber").value); //input from .html

var sum = 0;
for (var i = 1; i< num.length; i++){  //var i = 1 b/c user always enters 6 digits, i feel this is wrong?
    arr2.push(parseInt(num[i]));
    sum += (arr2[i]*arr[i]);
}

console.log(sum);

Ответы [ 4 ]

1 голос
/ 03 апреля 2020

попробуйте использовать const input = '837465'.split('') или готовый массив const input = [8, 3, 7, 4, 6, 5] и метод redu () для массива суммирования. Reduce будет работать при наличии элементов в исходном массиве

const array = [5, 7, 3, 5, 2]
const input = '837465'.split('')
//or 
// const input = [8, 3, 7, 4, 6, 5]

const summ = (input) => array.reduce((acum, rec, index) => acum + (rec * input[index]), 0)

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

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

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

function getTotal() {
  const arr = [5, 7, 3, 5, 2];
  var userNumbers = document.getElementById('yourNumber').value.split(''); 
  var sum = 0;
  //itreate over your array case it is short (or a condition to itreate over the shortest one)
  for (var i = 0; i < arr.length; i++) {
    sum += parseInt(userNumbers[i]) * arr[i];
  }

  console.log(sum);
  document.getElementById('answer').innerHTML ='Answer will be here: '+ sum;
}
<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="yourNumber" type="text" value="837465">

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

</body>

</html>
0 голосов
/ 03 апреля 2020

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

const arr = [5, 7, 3, 5, 2]
const nums = [8, 3, 7, 4, 6, 5]

let result = 0

for (const [ key, value ] of Object.entries(arr))
  result = result + (value * nums[key])

console.log(result) // 114

Или вы можете сделать это декларативно, используя Array.prototype.reduce -

const arr = [5, 7, 3, 5, 2]
const nums = [8, 3, 7, 4, 6, 5]

const result =
  arr.reduce
    ( (sum, value, key) => sum + (value * nums[key])
    , 0
    )

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

следующих работ:

const arr = [5, 7, 3, 5, 2];
var num = document.getElementById("yourNumber").value; //input from .html

var sum = 0;
for (var i = 0; i< num.length-1; i++){  //var i = 1 b/c user always enters 6 
digits, i feel this is wrong?
    sum += (arr[i]*parseInt(num[i]));
}

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