Значение массива перезаписывается вместо сохранения старого значения - Javascript

1

Это то, чего я хочу.

Пользователь вводит числовой ввод. Если он войдет в 2, код предложит ввести два имени игрока.

Имена игроков хранятся в массиве. На странице есть кнопка "Следующий", когда пользователь нажимает на нее, подсказки кода вводят еще два имени.

Следующая сложная часть: прямо сейчас на двух отдельных сеансах вводится четыре имени. Теперь мне нужно, чтобы вложенный массив содержал имена пользователей в разных массивах на основе сеанса.

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

var TotalNumOfPlayers = prompt("Enter The Total Number Of Players! (For example 2)");
var nameOfPlayers = [];
var loopThroughAllNames = new Array(new Array());
var NextList = document.querySelector("#NextList");
var tempArr = [];

addValue();

function addValue() {
  for (var i = 0; i < TotalNumOfPlayers; i++) {
    tempArr[i] = prompt("Enter Player name "+(i+1));
  }

  loopThroughAllNames.push(tempArr);
}

NextList.addEventListener("click", function() {
  addValue();

});
<button id="NextList">Next list</button>
  • 0
    потому что вы всегда начинаете с нуля ...
  • 0
    Сожалею. Это не работает Я только что попробовал это. Это все еще перезаписывает значения. Однако, спасибо.
Теги:
arrays
multidimensional-array

3 ответа

3
Лучший ответ

Ваш for-loop всегда начинается с 0 для одного и того же tempArr (инициализируется один раз за пределами метода addValue), поэтому он перезаписывает предыдущие записи.

for (var i = 0; i < TotalNumOfPlayers; i++) {
    tempArr[i] = prompt("Enter Player name "+(i+1));
  }

Вам нужно инициализировать массив tempArr внутри метода addValue.

демонстрация

var loopThroughAllNames = [];
var TotalNumOfPlayers = prompt("Enter The Total Number Of Players!");
addValue();

function addValue () 
{
  var tempArr = [];
  for (var i = 0; i < TotalNumOfPlayers; i++) {
    tempArr[i] = prompt("Enter Player name");
  }
  loopThroughAllNames.push(tempArr);  
  console.log( loopThroughAllNames );
}

var NextList = document.querySelector("#NextList");
NextList.addEventListener("click", function() {
  addValue( );
});
<button id="NextList">Next list</button>
  • 0
    @mplungjan Нет, только что проверил. Если tempArr не инициализируется каждый раз, тогда он перезаписывает предыдущие значения.
  • 0
    @mplungjan Спасибо, я исправил это. Я думал, что это то, что хотел ОП.
Показать ещё 4 комментария
3

Проверьте ссылку ниже

JsFiddle

var TotalNumOfPlayers = prompt("Enter The Total Number Of Players! (For example 2)");
var loopThroughAllNames = [];
var NextList = document.querySelector("#NextList");

addValue();

function addValue() {
  var tempArr = [];
  for (var i = 0; i < TotalNumOfPlayers; i++) {
    tempArr[i] = prompt("Enter Player name " + (i + 1));
  }

  loopThroughAllNames.push(tempArr);
}

NextList.addEventListener("click", function() {
  addValue();
  document.write(JSON.stringify(loopThroughAllNames));
});
<button id="NextList">Next list</button>
1

Я создаю массив массивов для вставки имен. tempArr объявляется пустым внутри addValue а затем addValue в глобальный массив allnames

var TotalNumOfPlayers = prompt("Enter The Total Number Of Players! (For example 2)");
var nameOfPlayers = [];
var loopThroughAllNames = new Array(new Array());
var NextList = document.querySelector("#NextList");
var allnames = [];

addValue();

function addValue() {
  var tempArr = [];
  for (var i = 0; i < TotalNumOfPlayers; i++) {
    tempArr[i] = prompt("Enter Player name "+(i+1));
  }

  loopThroughAllNames.push(tempArr);
  allnames.push(tempArr);
}

NextList.addEventListener("click", function() {
  addValue();
  console.log(allnames)
});
<button id="NextList">Next list</button>
  • 0
    Большое вам спасибо, Раджкумар. Работает красиво. Царапал мою голову. Код работает, потому что tempArr остается только внутри функции «addValue». Спасибо еще раз.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню