数据绑定与数组的元素

时间:2017-07-03 13:09:26

标签: javascript arrays object

为什么这种表示法不起作用

const result1  = _model['dataarray[0]'];

_model.dataarray存在,它是一个包含2个元素的数组

这" console.log(_model.dataarray [0])"罚款

2 个答案:

答案 0 :(得分:3)

它不起作用,因为您将整个事物包装为字符串,这不是访问对象属性的正确方法。但只有键应该在字符串中。否则,解释器会查找名为dataarray[0]的密钥,该密钥不存在。

正确的语法是

const result1  = _model['dataarray'][0];

Property accessors

答案 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!!');
    }
}

<强>演示:

&#13;
&#13;
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;
&#13;
&#13;

注意:

这个函数只接受dataarray[1]或简单属性这样的表达式,你需要改进它来接受更复杂的表达式,我只是写了它给你一些关于如何使用它的提示。