用条件简化对象的方法os数组:是数字吗?

问题描述

我有一个数组:

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)