Надо, чтобы при вводе одинаковых элементов, индекс следующего возрастал по мере увеличения их количества

Уже день третий сижу и думаю, как бы это сделать...

let ids = new Array("one_elem", "two_elem", "three_elem", "four_elem", "five_elem", "six_elem");
let more_ids = new Array("formula");
let ids_numb = 0;

function idNumbAdd() {
  ids_numb = ids_numb + 1;
}

let element;

function WriteElement(element) {
  if (ids_numb <= 4) {
    document.getElementById(ids[ids_numb]).innerHTML = element;
  }
}

let index = 1;

function CheckMoreIndex() {

}

function CheckForm() {
  if (ids_numb == 2) {
    let dble_form = document.getElementById(ids[0]).innerHTML + document.getElementById(ids[1]).innerHTML;
    switch (dble_form) {
      case "H2":
        document.getElementById(more_ids[0]).innerHTML = "Водород";
        break;
      case "Li2":
        document.getElementById(more_ids[0]).innerHTML = "Дилитий";
        break;
    }
  }
}

function Reset() {
  ids_numb = 0;
  index = 1;
  document.getElementById(more_ids[0]).innerHTML = null;
  for (let i = 4; i >= 0; i--) {
    document.getElementById(ids[i]).innerHTML = null;
  }
}
<div class="container">
  <table class="keyboard-and-field">
    <tbody>
      <tr>
        <td>
          <div class="keyboard-elements">
            <table class="keyboard-table" border="0">
              <tbody>
                <tr class="keys-elements">
                  <td>
                    <div align="center" id="element" onclick="WriteElement('H'); CheckMoreIndex(); idNumbAdd();  CheckForm()">H</div>
                  </td>
                  <td>
                    <div align="center" id="element" onclick="WriteElement('He'); CheckMoreIndex(); idNumbAdd(); CheckForm()">He</div>
                  </td>
                  <td>
                    <div align="center" id="element" onclick="WriteElement('Li'); CheckMoreIndex(); idNumbAdd(); CheckForm()">Li</div>
                  </td>
                  <td>
                    <div align="center" id="element" onclick="WriteElement('Be'); CheckMoreIndex(); idNumbAdd(); CheckForm()">Be</div>
                  </td>
                  <td>
                    <div align="center" id="element" onclick="WriteElement('B'); CheckMoreIndex(); idNumbAdd(); CheckForm()">B</div>
                  </td>
                  <td>
                    <div align="center" id="element" onclick="WriteElement('C'); CheckMoreIndex(); idNumbAdd(); CheckForm()">C</div>
                  </td>
                  <td>
                    <div align="center" id="element" onclick="WriteElement('N'); CheckMoreIndex(); idNumbAdd(); CheckForm()">N</div>
                  </td>
                  <td>
                    <div align="center" id="element" onclick="WriteElement('O'); CheckMoreIndex(); idNumbAdd(); CheckForm()">O</div>
                  </td>
                  <td>
                    <div align="center" id="element" onclick="WriteElement('F'); CheckMoreIndex(); idNumbAdd(); CheckForm()">F</div>
                  </td>
                  <td>
                    <div align="center" id="element" onclick="WriteElement('Ne'); CheckMoreIndex(); idNumbAdd(); CheckForm()">Ne</div>
                  </td>
                  <td>
                    <div align="center" id="element" onclick="WriteElement('Na'); CheckMoreIndex(); idNumbAdd(); CheckForm()">Na</div>
                  </td>
                  <td>
                    <div align="center" id="element" onclick="WriteElement('Mg'); CheckMoreIndex(); idNumbAdd(); CheckForm()">Mg</div>
                  </td>
                  <td>
                    <div align="center" id="element" onclick="WriteElement('Al'); CheckMoreIndex(); idNumbAdd(); CheckForm()">Al</div>
                  </td>
                  <td>
                    <div align="center" id="element" onclick="WriteElement('Si'); CheckMoreIndex(); idNumbAdd(); CheckForm()">Si</div>
                  </td>
                  <td>
                    <div align="center" id="element" onclick="WriteElement('P'); CheckMoreIndex(); idNumbAdd(); CheckForm()">P</div>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
          <div class="field-for-formules">
            <table class="field-table">
              <tbody>
                <tr>
                  <td>
                    <div class="field">
                      <span id="one_elem"></span>
                      <span id="two_elem"></span>
                      <span id="three_elem"></span>
                      <span id="four_elem"></span>
                      <span id="five_elem"></span>
                      <span id="six_elem"></span>
                      <br/><br/>
                      <span id="formula"></span>
                      <br/><br/>
                      <span onclick="Reset()">Очистить</span>
                    </div>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
        </td>
      </tr>
    </tbody>
    <table>
</div>


Ответы (1 шт):

Автор решения: Stepan Kasyanenko

Можно сделать вот так.

const elements = [
  'H',
  'He',
  'Li',
  'Be',
  'B',
  'C',
  'N',
  'O',
  'F',
  'Ne',
  'Na',
  'Mg',
  'Al',
  'Si',
  'P'
];

function getHTMLElement(element) {
  const td = document.createElement('td');
  td.textContent = element;
  return td;
}

function fillElements(elements, container) {
  elements.forEach(element => {
    const td = getHTMLElement(element);
    td.addEventListener('click', () => onElementClick(element))
    container.appendChild(td);
  });
}

function fillFormula(formula) {
  const textFormula = formulaToText(formula);
  document.querySelector('.field-for-formules').innerHTML = textFormula;
}

function fillPredefined(formula, predefinedFormulas) {
  const predefined = getPredefinedFormula(formula, predefinedFormulas);
  document.querySelector('.predefined-for-formules').innerHTML = predefined ? predefined.name : "Неизвестно";
}

function formulaToText(formula) {
  let textResult = "";
  for (let item of formula) {
    textResult += item.element + (item.count > 1 ? `<sub>${item.count}</sub>` : "");
  }
  return textResult;
}

function onElementClick(element) {
  createFormula(formula, element);
  fillFormula(formula);
  fillPredefined(formula, predefinedFormulas)
}

fillElements(elements, document.querySelector('.keys-elements'));

const predefinedFormulas = [{
    name: "Водород",
    formula: [{
      element: "H",
      count: 2
    }]
  },
  {
    name: "Яблочная кислота",
    formula: [{
        element: "C",
        count: 4
      },
      {
        element: "H",
        count: 6
      },
      {
        element: "O",
        count: 5
      }
    ]
  }
];

const formula = [];
// Здесь самое главное
function createFormula(formula, element) {
  const lastElement = formula[formula.length - 1];
  // Если последний элемент равен нажатому. то увеличиваем счетчик
  if (lastElement && lastElement.element === element) {
    lastElement.count++;
  } else {
    formula.push({
      element,
      count: 1
    });
  }
}

function getPredefinedFormula(formula, predefinedFormulas) {
  // тут, по хорошему, надо сверять формулы, как массивы. Но мне лень, поэтому будем сверять их строчные варианты
  return predefinedFormulas.find(predefined => formulaToText(predefined.formula) === formulaToText(formula));
}
<div class="container">
  <table class="keyboard-and-field">
    <tbody>
      <tr>
        <td>
          <div class="keyboard-elements">
            <table class="keyboard-table" border="0">
              <tbody>
                <tr class="keys-elements">

                </tr>
              </tbody>
            </table>
          </div>
          <div class="field-for-formules">

          </div>
          <div class="predefined-for-formules">

          </div>
        </td>
      </tr>
    </tbody>
  </table>
</div>

→ Ссылка