代码之家  ›  专栏  ›  技术社区  ›  Edward Tanguay

如何在JavaScript对象的深度编辑特定值?

  •  -1
  • Edward Tanguay  · 技术社区  · 6 年前

    我在节点中有以下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 回复  |  直到 6 年前
        1
  •  4
  •   Jeremy Thille    6 年前
     this.responseData[idCode][property] = value; //doesn't work
    

    你就快到了。你忘了进去 fields 关键:

    this.responseData.fields[idCode][property] = value
    
        2
  •  0
  •   user10894214    6 年前

    它总是一个很好的选择 lodash 访问深层对象,因为如果某个对象未定义,它可能会引发错误。

    let field = `fields.` + idCode + '.' + property
    _.set(this.responseData, field, value)
    
    推荐文章