如何使用Square Bracket Notation来使用多个变量来调用嵌套对象?

时间:2016-08-18 21:01:46

标签: javascript

我试图创建一个函数,它将使用多个变量来选择正确的嵌套对象,然后能够对其进行操作。

var group1 = {
        fred: {
            debt: 5,
            income: 2
        },
        suzy: {
            debt: 3,
            income: 5
        }
    },
    group2 = {
        molly: {
            debt: 4,
            income: 4
        },
        jason: {
            debt: 6,
            income: 1
        }
    };

function debtCheck(group, name) {
    console.log(group.name.debt);         ==>Uncaught TypeError: Cannot read property 'debt' of undefined
    console.log(group[name].debt);        ==>Uncaught TypeError: Cannot read property 'debt' of undefined
    console.log([group][name].debt);      ==>Uncaught TypeError: Cannot read property 'debt' of undefined
    console.log([group[name]].debt);      ==>undefined
}

debtCheck('group1', 'fred');

目标是让它在控制台中显示5。如果我只做一个变量,它就可以正常工作。

function debtCheck(name) {
    console.log(group1[name].debt);
}

debtCheck('fred');

希望我明确表达了我的要求。谢谢你的帮助!

我对此有其他想法: 是基础对象不能变量吗?或者你不能连续有两个变量?

2 个答案:

答案 0 :(得分:4)

您将第一个参数作为字符串而不是对象传递。试试debtCheck(group1, 'fred');。此外,由于第二个参数应该是一个字符串,您需要通过group[name].debt访问它。

一些背景材料可以帮助您解决第一点:passing values/references to a function;关于第二点:working with objects



var group1 = {
  fred: {
    debt: 5,
    income: 2
  },
  suzy: {
    debt: 3,
    income: 5
  }
};
var group2 = {
  molly: {
    debt: 4,
    income: 4
  },
  jason: {
    debt: 6,
    income: 1
  }
};

function debtCheck(group, name) {
  console.log(group[name].debt);
}

// debtCheck('group1', 'fred');
debtCheck(group1, 'fred');




答案 1 :(得分:1)

两件事。你有group1作为字符串放入而不是对象。其次,在通过特定变量名称引用对象时,您不能使用点表示法。你需要使用方括号。

尝试:

function debtCheck(group, name) {
    console.log(group[name].debt);
 }

debtCheck(group1, 'fred');