【问题标题】:Using filter and reduce JS使用过滤器和减少JS
【发布时间】:2021-07-05 10:16:59
【问题描述】:

我正在尝试使用 filter 和 reduce 来获取 Bob 购买的总价格,以便对我正在做的高阶函数进行一些练习。 给了我

const purchases = [{"owner":"Barry","price":103},{"owner":"Bob","price":75},
{"owner":"Bob","price":73},{"owner":"Barry","price":57},{"owner":"Barry","price":128},
{"owner":"Bob","price":119},{"owner":"Barry","price":133},{"owner":"Barry","price":27},
{"owner":"Barry","price":138},{"owner":"Bob","price":68},{"owner":"Bob","price":50},
{"owner":"Barry","price":9},{"owner":"Bob","price":123},{"owner":"Bob","price":135},
{"owner":"Barry","price":30},{"owner":"Barry","price":129},{"owner":"Barry","price":38},
{"owner":"Bob","price":133},{"owner":"Barry","price":109},{"owner":"Bob","price":115}]

使用高阶方法创建得到bobsTotal的总和。

这就是我的想法。我能够将鲍勃的购买过滤到一个数组中,但我现在无法获得总价。出于日志目的,我现在已将 reduce 部分注释掉。

let bobsTotal = purchases.filter(total=>total=purchases.owner="Bob")//.reduce((total, price) => total + price)
console.log(bobsTotal)

任何建议都会很棒,或者任何其他方法都会很棒。

【问题讨论】:

  • 应该是purchases.filter(purchase => purchase.owner === "Bob")
  • 对于reduce 部分,请注意第二个参数——它是一个对象,而不是一个数字
  • 你在正确的轨道上。 filterreduce 的回调函数不正确。在此处查看文档中的示例:filterreduce
  • common mistake 将是 .reduce((total, price) => total.price + price.price)。但是为什么你认为price 属性会以某种方式在.reduce((total, price) => total + price) 中自动访问? .reduce((total, {price}) => total + price, 0) 会起作用。
  • 感谢您的建议!看到我犯的小错误非常有帮助。

标签: javascript filter reduce higher-order-functions


【解决方案1】:

你很亲密。

filter的回调需要是一个返回truefalse的函数。

reduce 的回调参数是aggregate(因为您将列表聚合成一个事物)和current value,并且您需要设置默认值0,以求和来自。

const purchases = [{"owner":"Barry","price":103},{"owner":"Bob","price":75},
{"owner":"Bob","price":73},{"owner":"Barry","price":57},{"owner":"Barry","price":128},
{"owner":"Bob","price":119},{"owner":"Barry","price":133},{"owner":"Barry","price":27},
{"owner":"Barry","price":138},{"owner":"Bob","price":68},{"owner":"Bob","price":50},
{"owner":"Barry","price":9},{"owner":"Bob","price":123},{"owner":"Bob","price":135},
{"owner":"Barry","price":30},{"owner":"Barry","price":129},{"owner":"Barry","price":38},
{"owner":"Bob","price":133},{"owner":"Barry","price":109},{"owner":"Bob","price":115}]

let bobtot = purchases.filter(p => p.owner === 'Bob').reduce((sum, p) => sum+p.price, 0);

console.log('bob\'s total:', bobtot);

【讨论】:

  • 谢谢马特。这很好用而且很有意义。我很高兴我至少走在了正确的轨道上,只是需要你们所有伟大的溢出者的一点点推动!
猜你喜欢
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
相关资源
最近更新 更多