如何访问数组中的属性?

时间:2018-04-14 19:01:26

标签: javascript arrays

那么为什么我无法通过数组[0] .obj.accessible访问数组属性?

var array = [{
    option1 : '',
    option2 : '',
    option3 : '',

    TEST : {
        accessible : '',
        optional : ''
    },
    TEST2 : {
        accessible : '',
        optional : ''
    },
    TEST3 : {
        accessible : '',
        optional : ''
    }
}];

function updateArray(obj, acc, opt) {
    // this is not working - why?
    //array[0].obj.accessible = acc;
    //array[0].obj.optional = opt;

    // this is working fine:
    array[0].option1 = 'option1';
    // or this:
    array[0].TEST.accessible = acc;

    // so why array[0].obj is not refer to 'TEST' ? (obj = 'TEST')
    // cause I don't want to build the function updateArray X times with array[0].TEST.accessible, array[0].TEST2.accessible, array[0].TEST3.accessible, etc.
}

updateArray('TEST', 'yes', 'true');

console.log(array);

3 个答案:

答案 0 :(得分:0)

// this is not working - why?
//array[0].obj.accessible = acc;
//array[0].obj.optional = opt;

因为您的对象中没有名为obj的键位于数组的0元素。

var array = [{
    obj : {
        accessible : '',
        optional : ''
    },

    ...
}];

在上面,我创建了键obj,它是一个带有其他键的对象。现在这将有效:

array[0].obj.accessible = acc;
array[0].obj.optional = opt;

在第二次查看您的函数时,我认为您希望能够动态访问函数中对象的属性。如果是,请使用[]并传递密钥名称:

function updateArray(obj, acc, opt) { // obj === 'TEST'
    array[0][obj].accessible = acc;
    array[0][obj].optional = opt;
}

答案 1 :(得分:0)

您应该使用:

array[0][obj].accessible

使用数组[0] .obj正在obj内寻找键array[0],但没有这样的键。

答案 2 :(得分:0)

这是一个很棒的问题!在学习JavaScript时,这确实是一个很难习惯的事情!

为了动态访问对象属性,必须使用括号语法([])而不是点.语法。

像这样:

function updateArray(obj, acc, opt) {
  array[0][obj].accessible = acc;
  array[0][obj].optional = opt;
  ...
}