javascript - 我如何使用过滤器而不是 forEach (Javascript)
问题描述
我有以下功能。我正在使用 forEach。我如何在我的函数中使用过滤器而不是使用 forEach。我在网上搜索但找不到实现这一目标的方法。
pendingPaymentsUtils.getPendingPayment = paymentId => {
const payments = pendingPaymentsUtils.getPendingPayments()
let payment = {}
payments.forEach(function(_payment) {
if (_payment.id === paymentId) {
payment = _payment
return false
}
})
return payment
}
我已经尝试了以下方式,但它没有按预期工作。
pendingPaymentsUtils.getPendingPayment = paymentId => {
const payments = pendingPaymentsUtils.getPendingPayments()
let payment = {}
payments.filter(function(_payment) {
payment = _payment
return _payment.id === paymentId ? false: true
})
return payment
}
解决方案
filter
返回一个结果数组,所以只需返回它并摆脱payment
变量。_payment.id === paymentId ? false: true
可以缩短为return _payment.id === paymentId;
- 使用箭头函数的隐式返回来进一步缩短它。
- 从外观上看,您需要的是
find
而不是filter
.
像这样的东西:
pendingPaymentsUtils.getPendingPayment = paymentId => {
const payments = pendingPaymentsUtils.getPendingPayments();
return payments.find(payment => payment.id === paymentId);
}
如果您摆脱冗余payments
变量,则更短:
pendingPaymentsUtils.getPendingPayment = paymentId =>
pendingPaymentsUtils.getPendingPayments().find(payment => payment.id === paymentId);
编辑:
返回一个空对象而不是undefined
如果没有找到对象:
pendingPaymentsUtils.getPendingPayment = paymentId =>
pendingPaymentsUtils.getPendingPayments().find(payment => payment.id === paymentId) || {};
推荐阅读
- javascript - 从辅助函数返回值
- python-3.x - 如何为字节文件自定义实现词袋?
- opencl - 在 OpenCL 中,可以获取一个包含 GCN 程序集的数组并执行它(JIT)吗?
- ruby-on-rails - JsonB 和 attr_json gem:以编程方式获取定义的属性
- c# - Entity Framework Core:包括从 SQL 视图中查找数据以显示在 Razor 页面中
- android - 尝试使用 google drive 在 android 应用程序(使用 kotlin)webview 中显示在线 pdf 有时会产生错误
- python - Keras 模型无法预测
- java - 连接本地容器docker
- kotlin - Alias 带参数的 Annotation
- python - Kinesis 订阅分片