2016-02-07 27 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; 
       }