2016-08-18 51 views
1

我想創建一個函數,它將使用多個變量來選擇正確的嵌套對象,然後能夠操縱它。如何使用方括號表示法使用多個變量調用嵌套對象?

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'); 

希望我明確表達了我的要求。謝謝您的幫助!

我對它有過的其他想法: 基礎對象是不是變量?或者你不能在一行中有兩個變量?

+1

把你的'group1','group2'等變量到另一個物體,就像你怎麼會有'fred'和'group1'內'suzy'。 –

+2

您將第一個參數作爲字符串而不是對象傳遞。試試'債務檢查(group1,'fred');'。另外,由於第二個參數應該是一個字符串,您需要通過group [name] .debt來訪問它。 –

+0

@JasonCust你應該做出這個答案。 – Pavlo

回答

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

兩件事。您將group1作爲字符串放入,而不是對象。其次,通過特定的變量名稱引用對象時,不能使用點符號。你需要使用方括號。

嘗試:

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

debtCheck(group1, 'fred'); 
+0

這個伎倆。我不明白爲什麼我自己不明白。無論如何。謝謝! – Chris

相關問題