问题描述
const products = [
{ product: 'banana',price: 3 },{ product: 'mango',price: 6 },{ product: 'potato',price: ' ' },{ product: 'avocado',price: 8 },{ product: 'coffee',price: 10 },{ product: 'tea',price: '' },]
我想总结所有价格。我尝试过的:
const sum = products.reduce(function(acc,cur){
if (Number.isInteger(cur.price))
return acc+cur.price
},0)
console.log(sum)
它返回未定义。我还尝试了没有条件的情况,它返回一个字符串。我在哪里犯错?
解决方法
如果条件不是true
,则需要返回累加器。
const
products = [{ product: 'banana',price: 3 },{ product: 'mango',price: 6 },{ product: 'potato',price: ' ' },{ product: 'avocado',price: 8 },{ product: 'coffee',price: 10 },{ product: 'tea',price: '' }],sum = products.reduce(function(acc,cur) {
if (Number.isInteger(cur.price)) return acc + cur.price;
else return acc;
},0);
console.log(sum);
一种较短的方法有条件地添加值,最后只返回累加器。
const
products = [{ product: 'banana',cur) {
if (Number.isInteger(cur.price)) acc += cur.price;
return acc;
},0);
console.log(sum);
,
尝试一下:
const products = [
{ product: 'banana',price: 10 },price: '' },]
const sum = products.filter(x => typeof x.price === 'number').map(x => x.price).reduce((a,b) => a + b);
console.log(sum)
,
最后一个元素tea的累加结果为undefined
,因为如果price
不是数字,则不返回任何值。由于这是对累加器的最后一次调用,因此reduce
的结果也是undefined
。
如果您只想忽略价格无效的值,则可以使用
products.filter(x => Number.isInteger(x.price)).reduce (...)
仅汇总具有有效价格的产品
或如果acc
不是数字,则返回实例 cur.price
。
const sum = products.reduce(function(acc,cur){
if (Number.isInteger(cur.price))
return acc+cur.price;
return acc;
},0)
console.log(sum)