Почему я должен назначить новый массив, чтобы каждый динамический объект (компонент) удалялся? - PullRequest
1 голос
/ 07 июня 2019

У меня есть массив JS, который я использую в QML.В этом массиве я храню много динамических объектов (компонентов), которые я создаю и показываю в своем окне приложения.У меня также есть кнопка «Очистить все», которая должна удалять все элементы путем перебора этого массива.Я использую delete, а затем shift(), чтобы удалить элементы, однако по некоторым причинам не каждый объект удаляется или удаляется.Это почему?

Это код, который не работает:

Button
{
    id: clearallButton
    width: 60
    height: 25
    text: qsTr("Clear all")

    onClicked:
    {
        for (var y = 0; y < canvas.componentvect.length; ++y)
        {
            canvas.componentvect[y].destroy();
            canvas.componentvect.shift();
        }                        
    }
}

И это код, который работал для меня:

Button
{
    id: clearallButton
    width: 60
    height: 25
    text: qsTr("Clear all")

    onClicked:
    {
        for (var y = 0; y < canvas.componentvect.length; ++y)
        {
            canvas.componentvect[y].destroy();                            
        }
        var emptyvect=[];
        canvas.componentvect=emptyvect;
    }
}

Когда я пытаюсь вариант 1, он только удаляет некоторые объекты, а некоторые все еще остаются?Это почему?Я вызываю delete для каждого объекта и shift(), чтобы удалить его из массива.Разве не каждый объект должен быть удален тогда, как в примере 2?

1 Ответ

1 голос
/ 07 июня 2019

Хорошо, теперь я чувствую себя очень глупо.Используя shift () внутри цикла, итерация не работает должным образом, потому что, если итерационная переменная уничтожает объект в позиции 0, а затем я использую shift (), объект, который должен был быть в позиции 1, перемещается в позицию 0. Была ли логикаошибка моя плохая.

Это обновленный код, и он работает:

onClicked:
{
    while(canvas.componentvect.length !=0)
    {
        canvas.componentvect[0].destroy();
        canvas.componentvect.shift();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...