如何通过函数获取指定对象键?表单多语言验证消息参数异常
嘿,我来帮你搞定这两个问题!
问题1:如何通过函数获取对象的指定键?
要获取对象的指定键,核心要看你是用固定的键名还是变量形式的键名,两种场景对应不同的写法:
- 如果键名是明确的固定值,用点符号(
.)就可以,比如user.name; - 如果键名是变量(比如函数参数传入的),必须用方括号符号(
[])——这是点符号替代不了的,也是新手容易踩坑的点。
给你写个简单的函数示例:
function getObjectKey(obj, key) { // 这里必须用方括号,因为key是变量 return obj[key]; } // 使用例子 const product = { id: 101, name: "无线耳机" }; console.log(getObjectKey(product, "id")); // 输出 101 console.log(getObjectKey(product, "name")); // 输出 "无线耳机"
要是误用点符号obj.key,JS会把key当成一个字面量的键名去查找,而不是用变量key的实际值,自然拿不到你想要的结果。
问题2:表单验证多语言错误消息的target参数问题
你遇到的问题刚好就是上面说的点符号和方括号的区别!
你的代码里return messages.de.target失效,是因为JS把target当成了字符串字面量,去messages.de里找名为"target"的键,而不是用你传入的target参数的值。
只需要把点符号改成方括号就能解决:
function formMessages(field, target) { var messages = { 'de' : { 'valueMissing': 'Bitte füllen Sie dieses Feld aus.', 'typeMismatch': { 'email': 'Bitte geben Sie eine E-Mail ein.', 'url': 'Bitte geben Sie eine URL ein.' } } }; // 用方括号访问变量target,就能正确解析参数值了 return messages.de[target]; }
比如你传入target = "valueMissing"时,messages.de[target]就等价于messages.de.valueMissing;如果传入target = "typeMismatch",就会返回对应的嵌套对象,完全符合你的需求。
要是之后需要访问typeMismatch下的子键(比如email),可以再加个参数(比如subTarget),用messages.de[target][subTarget]就能拿到对应的值啦~
内容的提问来源于stack exchange,提问作者QJan84
相关产品推荐
相关产品推荐

