为什么这种表示法不起作用
const result1 = _model['dataarray[0]'];
_model.dataarray
存在,它是一个包含2个元素的数组
这" console.log(_model.dataarray [0])"罚款
答案 0 :(得分:3)
它不起作用,因为您将整个事物包装为字符串,这不是访问对象属性的正确方法。但只有键应该在字符串中。否则,解释器会查找名为dataarray[0]
的密钥,该密钥不存在。
正确的语法是
const result1 = _model['dataarray'][0];
答案 1 :(得分:2)
好console.log(_model.dataarray[0])
工作正常,因为_model.dataarray[0]
与_model['dataarray[0]']
不同,这是不正确的,你不应该将数组索引包装在字符串中。
使用以下语法:
const result1 = _model['dataarray'][0];
或者喜欢console.log()
:
const result1 = _model.dataarray[0];
修改强>
要拥有一个从对象动态获取值的函数,无论该值是否为key
,这可能是您的代码:
getValue = function(_model, valueToFind){
if(_model.hasOwnProperty(valueToFind)){
return _model[valueToFind];
}else if(valueToFind.indexOf("[")>0){
let key = valueToFind.substring(0, valueToFind.indexOf("["));
let index = parseInt(valueToFind.charAt(parseInt(valueToFind.indexOf("["))+1));
return _model[key][index];
}else{
console.log('Please input a valid key!!');
}
}
<强>演示:强>
getValue = function(_model, valueToFind){
if(_model.hasOwnProperty(valueToFind)){
return _model[valueToFind];
}else if(valueToFind.indexOf("[")>0){
let key = valueToFind.substring(0, valueToFind.indexOf("["));
let index = parseInt(valueToFind.substring(valueToFind.indexOf("[")+1, valueToFind.indexOf("]")));
console.log(index);
return _model[key][index];
}else{
console.log('Please input a valid key!!');
}
}
var _model = {dataarray: ["test1", "test2"]};
console.log(getValue(_model, "dataarray"));
console.log(getValue(_model, "dataarray[1]"));
console.log(getValue(_model, "property"));
&#13;
注意:强>
这个函数只接受dataarray[1]
或简单属性这样的表达式,你需要改进它来接受更复杂的表达式,我只是写了它给你一些关于如何使用它的提示。