首页 > 解决方案 > 减少循环逻辑?

问题描述

有没有办法重构它,使代码看起来更短且可读?中的 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);

标签: javascriptnode.js

解决方案


在有效负载中制作一组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);


推荐阅读