Как я могу редактировать определенное значение глубоко в объекте JavaScript? - PullRequest
0 голосов
/ 18 января 2019

У меня есть следующий объект JavaScript в узле:

that.responseData = {
    fields: {
        id: {
            label: 'ID',
            value: objectRecord.id,
            info: '',
            example: '',
            required: false,
            errorStatus: '',
            errorMessage: ''
        },
        title: {
            label: 'Title',
            value: objectRecord.title,
            info: '',
            example: 'The Best of C#',
            required: true,
            errorStatus: '',
            errorMessage: ''
        }
    }
}

Я хочу иметь возможность легко изменить, например, errorMessage определенного поля, например с:

this.setDataInFields('title', 'errorMessage', 'Title is required.'); 

Каков синтаксис для этого, например, если у меня есть эта функция:

setDataInFields(idCode, property, value) {
    this.responseData.fields.author.errorMessage = 'changed'; // this works

    //this.responseData[idCode][property] = value; //doesn't work

    //this.responseData.fields = { //doesn't work
    //  [property]: value
    //};

    //this.responseData.fields[idCode][property]['errorMessage'] = value; // doesn't work
}

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Всегда полезно использовать lodash для доступа к глубоким объектам, так как это может привести к ошибке, если что-то не определено

let field = `fields.` + idCode + '.' + property
_.set(this.responseData, field, value)
0 голосов
/ 18 января 2019
 this.responseData[idCode][property] = value; //doesn't work

Ты почти у цели. Вы забыли ввести внутри клавиши fields:

this.responseData.fields[idCode][property] = value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...