2012-02-14 4 views
2

У меня есть масса вопросов для интерактивной игры викторины. Когда вы отвечаете на вопрос, функционально, я хочу, чтобы этот вопрос был удален из массива (cat4Questions), чтобы он не вернулся для игрока, поэтому я попытался его соединить.Как удалить последний элемент массива?

Я не был уверен, что он работает, поэтому я проследил массив. В то время как я ожидал, что «вопрос 1, вопрос 2, вопрос 3, вопрос4» будет прослежен, «вопрос 1, вопрос2, вопрос3, вопрос4, вопрос5» был результатом моего следа.

Это строка кода, где я пытаюсь соединить массив:

cat4Questions.splice(cat4Questions.length,1); 

trace(cat4Questions); 
+2

Вам нужно использовать 'cat4Questions.length - 1', или еще лучше, используйте только' -1' для ссылки на последний элемент array: http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=00000752.html –

+1

Просто подведем итог и дадим понять будущим читателям этого (довольно многословного) q & a - ответьте на вопрос «Как удалить последний элемент массива?» is myArray.pop() –

ответ

12

Вы должны взглянуть на shift() и pop() методы массива.

shift() Удаляет первый элемент из массива и возвращает этот элемент. Остальные элементы массива перемещаются из их исходного положения, i, в i-1.

pop() Удаляет последний элемент из массива и возвращает значение этого элемента.

В вашем случае вам, вероятно, понадобится функция pop(), чтобы удалить последний элемент массива.

+0

'+ 1' Удобно использовать функцию' pop() 'во всех случаях, когда вам нужно удалить любой элемент из массива (если он не отсортирован).Сохраняя результат 'pop()' против временной переменной, а затем заменяя элемент по заданному индексу, это путь, путь быстрее, чем использование 'splice()' или большинства других методов. – Marty

1

Массивы нулевые индексы, поэтому вы должны использовать Array.length-1;, чтобы получить положение индекса массива.

cat4Questions.splice(cat4Questions.length-1,1); 
trace(cat4Questions); 

след сейчас.

+0

Я обнаружил, что более выгодно использовать метод shift() для первого элемента массива для функциональности, которую я хочу. – Graeme

1

Возможно, вы удалите элементы, отличные от последнего элемента массива. Если, например, пользователь отвечает на другой вопрос.

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

cat4Questions.splice(cat4Questions.indexOf(question), 1); 

Редактировать

Как я уже говорил в комментариях ниже, вы действительно не должны смотреть на производительность этого. Но вот как использовать pop вместо сращивания.

cat4Questions[cat4Questions.indexOf(question)] = cat4Questions.pop(); 

Вы также можете удалить вызовы поп и IndexOf, потому что они не являются эффективными либо

lastQuestion = cat4Questions[--numQuestions]; 
cat4Questions[question.index] = lastQuestion; 
lastQuestion.index = question.index; 

Где вопрос есть вопрос должен быть удален, индекс является индексом вопроса (вы должны следить за этим), а numQuestions - общее количество вопросов. Таким образом, вы никогда не используете длину, indexOf, pop, splice, ...

+0

Я рекомендую использовать 'splice()', когда требуемый массив нужно упорядочить. – Marty

+0

Ну, я думаю, его вопросы имеют какой-то порядок. Но каким бы то ни было образом, он не собирается делать эту операцию много раз, чтобы она стала проблемой. Это может быть проблемой, если он собирается удалить «большое» количество элементов «каждый». Но здесь он собирается удалить «элемент» и только несколько раз за всю жизнь игры. Если есть проблемы с производительностью, это не значит, что он должен смотреть. – sch

+2

В то же время, я подтверждаю, что массивы имеют действительно ужасное исполнение во вспышке. Даже array.length имеет очень плохую производительность. Поэтому всякий раз, когда вы имеете дело с большими массивами и/или выполняете много операций с ними на кадр, вы должны быть очень осторожны с их эффективностью. – sch

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