繁体   English   中英

Reduce 方法 os 具有条件的对象数组:是一个数字吗?

[英]Reduce method os array of objects with a condition: is a number?

我有一个数组:

 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', 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)) acc += cur.price; return acc; }, 0); console.log(sum);

尝试这个:

 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.filter(x => typeof x.price === 'number').map(x => x.price).reduce((a, b) => a + b); console.log(sum)

最后一个元素茶的累加器的结果是undefined因为如果price不是数字,则您不返回任何内容。 由于这是对累加器的最后一次调用,因此reduce的结果也是undefined

如果您只想忽略价格无效的值,您可以使用

products.filter(x => Number.isInteger(x.price)).reduce (...)

仅总结具有有效价格的产品

或者如果cur.price不是数字,则返回例如acc

const sum = products.reduce(function(acc, cur){
  if (Number.isInteger(cur.price)) 
    return acc+cur.price;
  return acc;
  }, 0)
 console.log(sum)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM