如何在javascript中填充对象数组中的字符串模板变量? [重复]

问题描述 投票:1回答:2

这个问题在这里已有答案:

我创建了一个对象数组,在其中一些对象中,我需要像这样引用它内部对象的属性:

let fields = [

{
    "ATTRIBUTE_NAME": "PERSON_NAME",
    "FIELD_NAME": "name"
    "ATTRIBUTE_ID": 1,
    "RULES": [
        {
            "MSG":`${this.ATTRIBUTE_NAME} is not valid`,
            "NAME": "VALID_VALUES",
        }
    ]
},
{
    "ATTRIBUTE_NAME": "PERSON_JOB",
    "FIELD_NAME": "job"
    "ATTRIBUTE_ID": 2,
    "RULES": [
        {
            "MSG":`${this.ATTRIBUTE_NAME} is not valid`,
            "NAME": "VALID_VALUES",
        }
    ]
}

]但这个关键字返回undefined!我希望“MSG”属性获取属性名称并为我填充它。有人知道如何在模板字符串中捕获它吗?

javascript
2个回答
1
投票

最简单的方法是使用getter为您的RULES财产。

一个简单的演示:

var obj = {
  id: 1,

  get info() {
    return `The id is ${this.id}.`;
  }

}

console.log(obj.info);

适用于您的代码:

let fields = [{
  "ATTRIBUTE_NAME": "PERSON_NAME",
  "FIELD_NAME": "name",
  "ATTRIBUTE_ID": 1,

  get RULES() {
    return [{
      "MSG": `${this.ATTRIBUTE_NAME} is not valid`,
      "NAME": "VALID_VALUES",
    }]
  }

}];

console.log(fields[0].RULES[0].MSG);

0
投票

您不能使用这样的自引用,因为尚未声明fields数组及其子元素。相反,你可以做的是:

  1. 首先声明fields数组及其子元素。
  2. 然后,迭代每个元素并在RULES数组中添加所需的对象。

例:

/* Declare the array and its sub-elements. */
let fields = [{
    "ATTRIBUTE_NAME": "PERSON_NAME",
    "FIELD_NAME": "name",
    "ATTRIBUTE_ID": 1,
    "RULES": []
  },
  {
    "ATTRIBUTE_NAME": "PERSON_JOB",
    "FIELD_NAME": "job",
    "ATTRIBUTE_ID": 2,
    "RULES": []
  }
];

/* Iterate over every element. */
fields.forEach(element => {
  element.RULES.push({
    "MSG": element.ATTRIBUTE_NAME + " is not valid",
    "NAME": "VALID_VALUES"
  });
});

/* Log the result. */
console.log(fields);
© www.soinside.com 2019 - 2024. All rights reserved.