Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сложение чисел (прошу помощи) (https://javascript.ru/forum/misc/69548-slozhenie-chisel-proshu-pomoshhi.html)

jamesson 02.07.2017 18:32

Сложение чисел (прошу помощи)
 
Привет всем!
Повилась необходимость организовать на сайте подсчет всех введенных чисел из полей input , но тонкость в том, что нужно, чтобы сумма числел например 24 суммировалась еще между собой (2+4) и получалас цифра от 1 до 9. Это нужно для нумерологии.
Есть такой код, работающий , но не имеющий этой тонкости, которая так нужна.

<script>// <![CDATA[
function addition() {
var a = parseInt(document.getElementById('a').value);
var b = parseInt(document.getElementById('b').value);
var c = parseInt(document.getElementById('c').value);
var d = parseInt(document.getElementById('d').value);
var f = parseInt(document.getElementById('f').value);
var g = parseInt(document.getElementById('g').value);
var h = parseInt(document.getElementById('h').value);
var j = parseInt(document.getElementById('j').value);

if (isNaN(a)==true) a=0;
if (isNaN(b)==true) b=0;
if (isNaN(c)==true) c=0;
if (isNaN(d)==true) d=0;
if (isNaN(f)==true) f=0;
if (isNaN(g)==true) g=0;
if (isNaN(h)==true) h=0;
if (isNaN(j)==true) j=0;

var k = a + b + c + d + f + g + h + j;

document.getElementById('result').innerHTML = a + " + " + b + " + " + c + " + " + d + " + " + f + " + " + g + " + " + h + " + " + j + " = " + k;
}
// ]]></script>
<form><input id="a" value="1" type="text"> <input id="b" value="1" type="text"> <input id="c" value="1" type="text"> <input id="d" value="1" type="text"> <input id="f" value="1" type="text"> <input id="g" value="1" type="text"> <input id="h" value="1" type="text"> <input id="j" value="1" type="text"> <br><input value="Сложить 2 два числа" onclick="addition();" type="button"></form>
<div id="result"></div>


Подскажите, что нужно добавить в код, чтобы итог был в виде одной цифры.
P.S в javascript еще очень слаб, освоил только html

Malleys 02.07.2017 19:01

//добавить функцию, которая бы это подсчитала
function getDigitSum(n) {
	var number = Array.from(n.toString()).reduce(function(sum, value) {
		return sum + Number(value);
	}, 0);

	return number >= 10 ? getDigitSum(number): number;
}

//использование 
var r = getDigitSum(24);
alert(r);

laimas 02.07.2017 19:03

Цитата:

Сообщение от jamesson
сумма числел например 24 суммировалась еще между собой (2+4) и получалас цифра от 1 до 9

Это как понимать?

Цитата:

Сообщение от jamesson
что нужно добавить в код

Форматировать нужно выставляемый код иначе читать его трудно.

рони 02.07.2017 19:12

калькулятор для нумерологии
 
jamesson,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>

  <script>
  window.addEventListener("DOMContentLoaded", function() {
    var form = document.querySelector("form"),
        input = form.querySelectorAll("input"),
        result = document.querySelector("#result");

    function sum(out, el) {
        return out + (+el.value || +el || 0)
    }
    form.addEventListener("submit", function(event) {
        event.preventDefault();
        var res = [].reduce.call(input, sum, 0);
        for (; (res += "").length > 1;) res = res.split("").reduce(sum, 0);
        result.innerHTML = res
    })
});
  </script>
</head>

<body>
<form>
<input id="a" value="1" type="text">
<input id="b" value="1" type="text">
<input id="c" value="1" type="text">
<input id="d" value="1" type="text">
<input id="f" value="1" type="text">
<input id="g" value="1" type="text">
<input id="h" value="1" type="text">
<input id="j" value="1" type="text">
<br>
<input value="Сложить"  class="add" type="submit"></form>
<div id="result"></div>

</body>
</html>

jamesson 02.07.2017 19:15

Спасибо большущее, сделал! Добавил ваш код, в иннер html вставил getDigitSum(k); и теперь все работает!

Teamur 02.07.2017 20:17

Вот еще вариант, но я не успел ))
var n="a,b,c,d,f,g,h,j".split(",").map(i=>document.getElementById(i).value);

function s(k){
 return k.map(i=>+i).reduce((a,b)=>a+b,0)
}

function h(v){
 while(v>9){
  v=s([...(v+"")])
 };
 return v
}

var r=h(s(n));

alert(r)


Часовой пояс GMT +3, время: 14:58.