javascript - 减少循环逻辑?
问题描述
有没有办法重构它,使代码看起来更短且可读?中的 Id 不会超过 100 个payload
,所以我认为在这种情况下性能并不重要。
const payload = {
RequestIds: [
{ Id: 1 },
{ Id: 3 },
]
}
const result = {
Items: [
{ Id: 1, Name: 'Item 1 A'},
{ Id: 1, Name: 'Item 1 B'},
{ Id: 2, Name: 'Item 2 C'},
{ Id: 2, Name: 'Item 2 D'},
{ Id: 3, Name: 'Item 3 E'},
{ Id: 3, Name: 'Item 3 F'},
]
}
const items = [];
for(const payloadItem of payload.RequestIds) {
const filteredItems = result.Items.filter(item => item.Id === payloadItem.Id);
if (filteredItems.length > 0) {
items.push(...filteredItems);
}
}
console.log(items);
解决方案
在有效负载中制作一组s,然后通过是否包含被迭代的 IdId
来做一个:.filter
const payload = {
RequestIds: [
{ Id: 1 },
{ Id: 3 },
]
};
const payloadIds = new Set(payload.RequestIds.map(({ Id }) => Id));
const result = {
Items: [
{ Id: 1, Name: 'Item 1 A'},
{ Id: 1, Name: 'Item 1 B'},
{ Id: 2, Name: 'Item 2 C'},
{ Id: 2, Name: 'Item 2 D'},
{ Id: 3, Name: 'Item 3 E'},
{ Id: 3, Name: 'Item 3 F'},
]
}
const items = result.Items.filter(({ Id }) => payloadIds.has(Id));
console.log(items);
推荐阅读
- python - 为什么在 C++ 中导入其模块后我无法访问我的 Python 函数?
- assembly - 如何处理存储在 MIPS 程序集堆栈指针中的三个或更多值?
- javascript - 使用 api.rpc.payment.queryFeeDetails 获取外部费用
- javascript - 如何使用 for 循环创建额外的一排方形块
- windows - Easyrsa3 - “build-ca”抛出“选项 -config 需要一个值”
- python - 使用boto3 python sdk查询aws以列出所有资源
- javascript - 在缺少的字段上以红色突出显示或点击
- c# - 请求返回空手机号码
- fetch - Deno 服务器 TLS 警报 HandshakeFailure
- ruby - 如何修复“`require_relative':无法加载此类文件”无法加载 - Ruby