我试图创建一个函数,它将使用多个变量来选择正确的嵌套对象,然后能够对其进行操作。
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');
希望我明确表达了我的要求。谢谢你的帮助!
我对此有其他想法: 是基础对象不能变量吗?或者你不能连续有两个变量?
答案 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');