2016-05-13 1 views
0

Эта ошибка продолжала беспокоить меня уже около 2 часов ... Я делаю простую игру, где вы можете иметь свой собственный город, и я делаю строительную систему прямо сейчас , проблема в том, что игра вылетает всякий раз, когда я удаляю из массива (у меня есть очередь построения, которая содержит здания, которые будут построены, а затем удаляет их), строя из очереди сборки. Я пробовал .shift.pop.push.indexOf(0) === 0 и [0] === "" и .splice(1,1) он просто подходит, как .splice, не является функцией или .pop не является функцией для всех из них.Как удалить запись из моего массива в Javascript

Ничего не работало. Пожалуйста помоги!

if (buildValue === 100 && buildQueue.indexOf("house") === 0){ 
    populationmax++; 
    // here i need a command that will remove first element from array called buildQueue. 
    buildValue = 0; 
    } 
+2

'arr.splice (indexOfItemToDelete, 1)' – Redu

+0

дубликат http://stackoverflow.com/questions/369602/delete-an-element-from-an-array?rq=1 –

+0

Теперь, когда я видел другой код, я отредактировал свой ответ, чтобы исправить вашу проблему. –

ответ

1

Удаление из массива

if (buildValue === 100 && buildQueue.indexOf("house") === 0){ 
    populationmax++; 
    buildQueue.splice(0, 1); //removes first element 
    buildValue = 0; 
} 

JS Snippet

x = [1, 2, 3]; 
 
alert(x); //1,2,3 
 
x.splice(0, 1); 
 
alert(x); //2,3

Добавление к/Создание массива

Во-первых, вам не нужно ставить пустую строку внутри buildQueue массива, это действительно может вызвать проблемы в дальнейшем, просто сделать это:

buildQueue = []; 

Во-вторых, вы пытаетесь добавить строки в массив как если бы это была строка, используя +=. Делая это, однако, превращает ваш массив в строку, поэтому вы получаете предупреждение о `.splice()» вам нужно добавить строки в массив так:

buildQueue.push(someString); 

Этот путь buildQueue воли остаются массивом строк.

+0

не работал или попробовал это раньше. он просто поставляется с .shift - это не функция или что-то еще, я использую – killereks

+0

@ZgniotekMc, я добавил фрагмент, возможно, вы неправильно тестируете свой код? –

+0

Я не знаю, я клянусь, что использую его правильно, я использовал его раньше. И теперь он просто появляется .splice - это не функция. Я попытался поместить его в отдельную функцию. Мне нужно исправить это быстро, потому что я застрял на этом и не могу развить свою игру дальше. – killereks

0
var buildValue = 0, 
    buildQueue = [""], 
    buildSpeed = 1/200; 
    if (buildQueue[0]){ 
    buildValue += buildSpeed; 
    } 
    if (buildValue >= 100){ 
    buildValue = 100; 
    } 
    if (buildValue === 100 && buildQueue.indexOf("house") === 0){ 
    populationmax++; 

    buildValue = 0; 
    } 
    if (buildValue === 100 && buildQueue.indexOf("big house") === 0){ 
    populationmax+=4; 

    buildValue = 0; 
    } 
    if (buildValue === 100 && buildQueue.indexOf("gold storage") === 0){ 
    goldmax++; 

    buildValue = 0; 
    } 
    if (buildValue === 100 && buildQueue.indexOf("food storage") === 0){ 
    foodmax++; 

    buildValue = 0; 
    } 
    if (buildValue === 100 && buildQueue.indexOf("wood storage") === 0){ 
    woodmax++; 

    buildValue = 0; 
    } 
    if (buildValue === 100 && buildQueue.indexOf("stone storage") === 0){ 
    stonemax++; 

    buildValue = 0; 
    } 
    if (buildValue === 100 && buildQueue.indexOf("iron storage") === 0){ 
    ironmax++; 

    buildValue = 0; 
    } 

    buildSpeed = 0.2; 

Это все, что мне нужно для сборки. Также, если вы купите здание, он просто добавит массив. например, хранилище золота добавит buildQueue += "gold store"; И в промежутках между строками внутри ifs должна быть команда, которая удаляет элемент [0].

+0

OMG MAN СПАСИБО ВАМ, Я БЫЛ ВПЕРЕДИ ВСЕ ВРЕМЯ, НО [""] БЫЛО ОШИБКА. СПАСИБО Я ЛЮБЛЮ U: D – killereks

Смежные вопросы