Разбор строки в массиве затем обратно в строку - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь заполнить объект "this.model" в виде строки, которая изначально представляет собой массив значений, которые заполняются пользователем, установившим флажки в вопроснике.

Следующий код обрабатывает событиекогда пользователь нажимает на флажок, чтобы начать заполнять массив и удалять значение, когда пользователь дважды щелкает на одном и том же флажке.

public checked(check: QuestionnaireCheck): void {
    this.checkedOption = check;
    if(this.model[check.name] == undefined) {
        this.model[check.name] = [];
    }
    if(this.model[check.name].includes(check.value)) {
        let index = this.model[check.name].indexOf(check.value);
        if (index > -1) {
            this.model[check.name].splice(index, 1);
        }
    }
    else {
        this.model[check.name].push(check.value); 
    }
}

Моя попытка изменить этот массив на строковое значение заключается в следующем, где он начинаетсяпоскольку строка затем обрабатывает операции с массивом, но возвращает значение обратно как строку, я не уверен, как обработать начальное неопределенное состояние массива.

public checked(check: QuestionnaireCheck): void {
    let currentFeatures = this.model[check.name] || '';
    currentFeatures = JSON.parse(currentFeatures);

    if(currentFeatures.includes(check.value)) {
        let index = currentFeatures.indexOf(check.value);
        if (index > -1) {
            currentFeatures.splice(index, 1);
        }
    } else {
        currentFeatures.push(check.value); 
    }
    this.model[check.name] = JSON.stringify(currentFeatures);
}

Далее: я получаю сообщение об ошибке:

 ERROR SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>)

, что может быть связано с тем, что модель строится с помощью:

constructor(rawData?: Partial<SubmitModel>) {
    Object.assign(this, rawData);
}

Мои ожидаемые результаты - массив значений, содержащийся в строковом значении.то есть: ['' eggs ',' ham ']

становятся: "[' eggs ',' ham ']"

...