简体   繁体   English

JavaScript遍历数组,将price属性乘以2

[英]JavaScript loop through array, multiply price property by 2

I'm trying to loop through amusementRides in the doublePrices function below, multiplying the price by 2 but I get nothing in return. 我试图通过循环amusementRidesdoublePrices下方运行,由2价格乘以但我得到什么回报。 What am I missing? 我想念什么?

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

Thanks in advance! 提前致谢!

You can use map function of array and update required fields 您可以使用数组的映射功能并更新必填字段

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

}

amusementRides is an array, it is not defined as key values amusementRides是一个数组,未定义为键值

change the method to 将方法更改为

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

A good approach would be: 一个好的方法是:

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

you should avoid for-in loop with array 你应该避免与数组的循环

you can use forEach: 您可以使用forEach:

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

I think the only mistake in your code is you have tried to foreach loop like in C#. 我认为代码中的唯一错误是您尝试像C#中那样尝试foreach循环。 In Javascript you can't do that way. 在Javascript中,您无法这样做。

You can modify your code like below. 您可以像下面那样修改您的代码。

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

But the best approach will be : 但是最好的方法是:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM