2017-07-22 52 views
0

我有下面的代碼我工作:調用函數中的對象

function price ([arg1,arg2]) { 
    let city1 = {coffee:0.5, water:0.8, beer:1.2, sweets:1.45, peanuts:1.6}; 
    let city2 = {coffee:0.4, water:0.9, beer:1.4, sweets:1.25, peanuts:1.8}; 
    console.log (arg1[arg2]); 
} 

price (["city1","water"]) 

什麼我想在這裏實現的,當你調用具有特定產品的價格上市功能與城市名稱和產品。

從我所看到的情況來看,這是因爲「city1」以字符串形式輸入,這就是爲什麼在調用函數時沒有結果。任何想法如何將字符串的arg1輸入轉換爲對象?

我看着使用窗口和eval,但我無法找到一種方法來正確使用它們在這一個。我知道這是一個愚蠢的問題,我可能錯過了一些明顯的東西,但我幾乎想盡辦法想。

+2

你想真正實現? – error404

+0

使用對象名稱city1和屬性「water」調用函數時,在此情況下使控制檯記錄0.8。這是編程基礎課程中的作業(他們希望我們使用if/else,但我認爲可以有一種替代方法來做事)。 – pretzelic

回答

1

只是重新思考你是如何使用的對象。通過使用括號表示法而不是點符號來訪問對象屬性,您可以傳入一個字符串,這有助於事先不知道值。下面是一個例子,但請注意,您還應該檢查該屬性是否也存在。

另外值得一提的是,你不應該像這樣的數組傳遞你的參數。要麼直接傳入它們,要麼使用一個對象。

function price (city, item) { 
 
    let cities = { 
 
     city1 : {coffee:0.5, water:0.8, beer:1.2, sweets:1.45, peanuts:1.6}, 
 
     city2 : {coffee:0.4, water:0.9, beer:1.4, sweets:1.25, peanuts:1.8} 
 
    } 
 
    let res = cities[city][item] 
 
    console.log(res) 
 
    return res; 
 
} 
 

 
price ("city1", "water")

1

您可以使用城市作爲對象的鑰匙並通過鑰匙訪問它,以及產品的鑰匙。

function price(city, product) { 
 
    return (data[city] || {})[product]; 
 
} 
 

 
var data = { city1: { coffee: 0.5, water: 0.8, beer: 1.2, sweets: 1.45, peanuts: 1.6 }, city2: { coffee: 0.4, water: 0.9, beer: 1.4, sweets: 1.25, peanuts: 1.8 } }; 
 

 
console.log(price("city1", "water")); 
 
console.log(price("foo", "bar"));

+0

+1因爲最好在函數之外定義數據數組,以便每次都不重新創建。這也有一個巧妙的方法來檢查屬性是否存在。 –