如何使用.forEach正确访问数组中的对象?

时间:2018-05-07 04:58:25

标签: javascript arrays object

对于一个测验我得到了一个包含对象的数组:

var donuts = [
{ type: "Jelly", cost: 1.22 },
{ type: "Chocolate", cost: 2.45 },
{ type: "Cider", cost: 1.59 },
{ type: "Boston Cream", cost: 5.99 }
];

我的工作是使用.forEach方法遍历数组中的对象。好吧,我基本上攻击它并制作了一个迭代变量来帮助我使用索引来访问每个对象。

var i = 0;
donuts.forEach(function(donutSummary) {

var donut = donuts[i].type;
var cost = donuts[i].cost;

console.log(donut + " donuts cost $" + cost + " each");
i = i + 1;
});

在我的代码顶部,我声明并为我的索引分配了一个变量i。我知道必须有更好的方法来访问这个数组中的对象。

  

任何人都可以告诉我在不使用迭代变量的情况下执行此操作的正确方法是什么?

谢谢!

3 个答案:

答案 0 :(得分:6)

使用提供给forEach的函数,它的第一个参数是迭代的当前项。将为数组中的每个项调用该函数,因此您只需访问每个donutconsole.log的属性。请参阅here



const donuts = [
  { type: "Jelly", cost: 1.22 },
  { type: "Chocolate", cost: 2.45 },
  { type: "Cider", cost: 1.59 },
  { type: "Boston Cream", cost: 5.99 }
];

donuts.forEach(({ type, cost }) => console.log(`${type} donuts cost $${cost} each`));




或者,如果您不能使用解构和ES6语法:



var donuts = [
  { type: "Jelly", cost: 1.22 },
  { type: "Chocolate", cost: 2.45 },
  { type: "Cider", cost: 1.59 },
  { type: "Boston Cream", cost: 5.99 }
];

donuts.forEach(function(donut) {
  console.log(donut.type + ' donuts cost $' + donut.cost + ' each')
});




答案 1 :(得分:2)

你快到了。使用donutSummary代替donuts[i]

donuts.forEach(function(donutSummary) {

     var donut = donutSummary.type;
     var cost = donutSummary.cost;

     console.log(donut + " donuts cost $" + cost + " each");
});

供参考,Array.forEach

答案 2 :(得分:2)

这是forEach

的语法
arr.forEach(function callback(currentValue[, index[, array]]) {
    //your iterator
}[, thisArg]);

其中currentValue是数组中的当前对象,index是数组中对象的index。在这种情况下,i的目的将由索引提供,因此无需增加它。

此语法[, paramterName ..中的任何参数都是可选参数,例如[, index是可选的

var donuts = [{
    type: "Jelly",
    cost: 1.22
  },
  {
    type: "Chocolate",
    cost: 2.45
  },
  {
    type: "Cider",
    cost: 1.59
  },
  {
    type: "Boston Cream",
    cost: 5.99
  }
];


donuts.forEach(function(donutSummary, index) {
  console.log(donutSummary.type + " donuts cost $" + donutSummary.cost + " each");
});