这个问题在这里已有答案:
我创建了一个对象数组,在其中一些对象中,我需要像这样引用它内部对象的属性:
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”属性获取属性名称并为我填充它。有人知道如何在模板字符串中捕获它吗?
最简单的方法是使用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);
您不能使用这样的自引用,因为尚未声明fields
数组及其子元素。相反,你可以做的是:
fields
数组及其子元素。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);