考虑以下代码:
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;
}
});
^为什么该解决方案不起作用?
答案 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);
}