2016-02-07 23 views
0

我試圖在下面的doublePrices函數中循環使用amusementRides,將價格乘以2,但我沒有得到任何回報。我錯過了什麼?JavaScript循環數組,乘以價格屬性除以2

var amusementRides = [ 
    { 
     id:'A1', 
     name:'superman', 
     price:12, 
     opening_dates:[ 
     'Monday', 
     'Tuesday', 
     'Wednesday', 
     'Thursday', 
     'Friday', 
     'Saturday', 
     'Sunday' 
     ], 
     children_access:false 
    }, 
    { 
     id:'A2', 
     name:'raging bull', 
     price:10, 
     opening_dates:[ 
     'Saturday', 
     'Sunday' 
     ], 
     children_access:false 
    }, 
    { 
     id:'A3', 
     name:'teacups', 
     price:7, 
     opening_dates:[ 
     'Friday', 
     'Saturday', 
     'Sunday' 
     ], 
     children_access:true 
    } 
]; 

// Define variable 
var amusementRidesDouble = doublePrices(amusementRides); 

// Define function to multiply price by 2 
function doublePrices(amusementRides) { 

    for (var price in amusementRides) { 
     if amusementRides.hasOwnProperty(price) { 
      alert (price *= 2); 
    } 
} 
} 

console.log(amusementRidesDouble); 

在此先感謝!

+1

'price'是不是真正的價格,他們是amusementRides'的'指標。 – MinusFour

+0

從函數中返回'amusementRides'。 – RRK

回答

3

可使用數組和更新所需的字段

function doublePrices(amusementRides) { 
    amusementRidesdouble = amusementRides.map(function(item){ 
     item.price = 2 * item.price; 
     return item; 
    }) 
    return amusementRidesdouble; 

} 
+0

謝謝!我所經歷的練習強制我們使用'doublePrices'函數,所以我不能在amusementRidesdouble變量中使用map函數。 – stavros

+0

你可以簡單地把它包裝成函數 –

+0

一個跟進的問題: 如果我不得不創建第二個功能:'debugAmusementRides()' 這將通過景點 列表循環和寫名字和新價格每個項目的控制檯,我會怎麼做呢? – stavros

1

amusementRides的地圖功能是一個數組,它的方法不是定義爲鍵值

變化

for (var counter = 0; counter < amusementRides.length; counter++) 
    { 
    if (amusementRides[counter].price) 
     { 
      alert (amusementRides[counter].price * 2); 
      amusementRides[counter].price *= 2; 
     } 
    } 
+0

工作!謝謝您的幫助。 – stavros

0

你應該避免使用數組

您可以使用forEach:

amusementRides.forEach(function(item) { 
    item.price *= 2; 
}); 
0
for (var i=0; i<amusementRides.length; i++) { 
amusementRides[i].price*=2; 
} 
1

一個好辦法是:

var doublePrices = function(data) { 
    data.forEach(function(item) { 
     item.price *= 2; 
    } 
    return data; 
} 
0

我想在你的代碼中唯一的錯誤是你試圖foreach循環像在C#。在Javascript中,你不能那樣做。

您可以修改您的代碼,如下所示。

for (var i=0;i<amusementRides.length;i++) { 
    var price=amusementRides[i]; 
     alert (price *= 2); 
} 

但是,最好的辦法是:

amusementRides = amusementRides.forEach(function(item) { 
       item.price *= 2; 
       }