#javascript #arrays
#javascript #массивы
Вопрос:
При подготовке объектов для игры, которую я создаю на javscript, я считываю в объекте JSON deckData и добавляю каждый из них как дочерний элемент this.discard . Затем я планирую задание, которое проверяет, является ли это.deck пуст. Если это так, то функция должна перетасовать массив карт, перечисленных как дочерние элементы this.discard, а затем назначить их дочерними элементами this.deck .
Кажется, что весь процесс работает довольно гладко, за исключением ключевой строки, где я пытаюсь назначить заново перетасованный массив поверх:
this.deck.children_ = this.shuffle(this.discard.children_);
Я ищу решение, которое успешно добавит все элементы, которые были дочерними элементами this.discard как дочерние элементы this.deck . И я понимаю, что я еще не очищаю массив от этого.отбрасывайте пока тоже, но по одному шагу за раз. Полный фрагмент кода выглядит следующим образом:
sideboard = function(game) {
this.discard = new lime.Layer();
this.appendChild(this.discard);
for (var key in deckData) {
var cardData = deckData[key];
this.addCard(cardData);
};
this.mythosDeck = new lime.Layer();
this.appendChild(this.mythosDeck);
lime.scheduleManager.schedule(this.deckShuffler, this);
};
sideboard.prototype.deckShuffler = function() {
if (this.deck.children_.length < 1) {
this.deck.children_ = this.shuffle(this.discard.children_);
}
};
sideboard.prototype.shuffle = function(array) {
var tmp, current, top = array.length;
if(top) while(--top) {
current = Math.floor(Math.random() * (top 1));
tmp = array[current];
array[current] = array[top];
array[top] = tmp;
}
return array;
};
Ответ №1:
Разве вы не хотите просто объединить два массива и затем переназначить? Например:
this.deck.children_ = this.deck.children_.concat(this.shuffle(this.discard.children_));
Комментарии:
1. Учитывая то, как вы это там написали, не подумает ли браузер, что children_ — это функция, которой передается аргумент ‘this.shuffle …’, хотя? Я согласен с тем, что вы предлагаете мне сделать, но я предполагаю, что мое понимание назначения переменных в JS невелико — я предположил, что, учитывая то, как у меня это было, функция shuffle вернет массив, который будет назначен this.deck.children_ . На самом деле это доказало обратное.
2. Я устал и умудрился пропустить слово «concat», которое было самой важной частью этого. Теперь я это исправил. 🙂
3. Ха, я как раз собирался спросить, так ли это. Это работает отлично, спасибо!