如何通过在forEach循环中使用键返回想要的对象?

时间:2018-11-15 01:30:51

标签: javascript

考虑以下代码:

const year = 1910;

const items = [
  {
    name: 'gallon of gas',
    year: 1910,
    price: .12
  },
  {
    name: 'gallon of gas',
    year: 1960,
    price: .30
  },
  {
    name: 'gallon of gas',
    year: 2010,
    price: 2.80
  }
]

如何显示与上面定义的年份相对应的对象的价格?

items.forEach(d => {
 if (d.year === year) {
   return d.price;
   }
});

^为什么该解决方案不起作用?

3 个答案:

答案 0 :(得分:2)

无论您在回调函数中返回什么,forEach()函数都不会返回值。使用find()来查找符合您条件的项目:

const year = '1910';

const items = [
  {
    name: 'gallon of gas',
    year: 1910,
    price: .12
  },
  {
    name: 'gallon of gas',
    year: 1960,
    price: .30
  },
  {
    name: 'gallon of gas',
    year: 2010,
    price: 2.80
  }
];

const item = items.find(i => i.year == year);

console.log(item.price);

注意:您不能在回调===的回调中使用严格比较(find()),因为您正在比较年份 string 数字的年份。解决这个问题可能是个好主意。

答案 1 :(得分:1)

由于return语句位于函数forEach的处理程序内,因此,基本上,您返回的是处理程序执行而不是主函数。

您需要做的是使用for循环或函数find,如下所示:

let found = items.find(d => d.year === year);
if (found) return found.price;

或香草for循环:

for (let i = 0; i < items.length; i++) 
   if (items[i].year === year) return items[i].price;

答案 2 :(得分:-2)

这需要ES6(babel)。希望这可以帮助!从https://zellwk.com/blog/looping-through-js-objects/得到了它。

const year = 1910;

const items = [
  {
    name: 'gallon of gas',
    year: 1910,
    price: .12
  },
  {
    name: 'gallon of gas',
    year: 1960,
    price: .30
  },
  {
    name: 'gallon of gas',
    year: 2010,
    price: 2.80
  }
]
const values = Object.values(items)
for (const value of values) {
  //you can't return, but you can use the value or store it in a variable/array
  console.log(value.price);
}