@liltrill

Почему splice удаляет объект в всех массивах цепочкой?

Всем привет, есть подобие дерева которое состоит из массива с объектами, объекты так же имеют свои массивы с объектами.

Так же они могут заполняться из того что есть ниже(поглащать то что идет после них):
addIfQuestion(questionId, listQuestion = this.questionList) {
        let self = this;

        listQuestion.forEach(function (question, index) {
            if ( questionId === question.id ) {
                let copySplice = listQuestion.splice(index + 1);

                question.answer.forEach(function (answer, i) {
                    answer.children = copySplice.slice();
                    answer.checked = i === 0;
                });
            } else {
                if (question.ifQ) {
                    question.answer.forEach(function (answer) {
                        self.addIfQuestion(questionId, answer.children)
                    });
                }
            }
        });
    }

slice копирует значение и все вроде хорошо, но при удалении в одном месте элемент массива, он удаляется во всех
removeQuestion(questionId, listQuestion = this.questionList) {
        let self = this;

        listQuestion.forEach(function (question, index) {
            if ( question.id === questionId ) {
                listQuestion.splice(index, 1);
            }
            else if (question.ifQ) self.removeQuestion(questionId, question.answer.find(x => x.checked === true).children);
        });
    }

По идеи он должен удалять только объект в актином пути дерева, при тесте удаление происходит один раз, но удаляется обьекты в других ветках.

P.S: Как можно проверить нет ли ссылки на объект/массив вместо его копии?
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
IceRD
@IceRD
Скопировать массив можно так:
let copySplice = [...listQuestion];
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы