我目前正在使用for和findIndex来更新主result变量中的总数。有没有其他方法可以重写这段代码,使其更短或更具可读性?
const payload = [
        { Id: 1, Total: 5 },
        { Id: 3, Total: 2 },
]
const result = {
    Items: [
        { Id: 1, Name: 'Item 1 A', Total: 1, Type: "Main"},
        { Id: 1, Name: 'Item 1 B', Total: 0},
        { Id: 2, Name: 'Item 2 C', Total: 1, Type: "Main"},
        { Id: 2, Name: 'Item 2 D', Total: 0},
        { Id: 3, Name: 'Item 3 E', Type: "Main"},
        { Id: 3, Name: 'Item 3 F', Total: 0},
    ]
}
for(const itemPayload of payload) {
    const itemIndex = result.Items.findIndex(item => item.Id === itemPayload.Id && item.Type === "Main");
    
    if (itemIndex !== -1) {
        result.Items[itemIndex].Total = itemPayload.Total;
    }
}
console.log(result);
发布于 2019-11-25 02:44:31
您可以使用find()方法获取选择条件的第一个匹配项,并使用o.hasOwnProperty('Total') && obj.Id === o.Id)作为选择条件:
    const payload = [
            { Id: 1, Total: 5 },
            { Id: 3, Total: 2 },
    ]
    
    const result = {
        Items: [
            { Id: 1, Name: 'Item 1 A', Total: 1, Type: "Main"},
            { Id: 1, Name: 'Item 1 B', Total: 0},
            { Id: 2, Name: 'Item 2 C', Total: 1, Type: "Main"},
            { Id: 2, Name: 'Item 2 D', Total: 0},
            { Id: 3, Name: 'Item 3 E', Type: "Main"},
            { Id: 3, Name: 'Item 3 F', Total: 0},
        ]
    }
    
    payload.forEach(obj => result.Items.find(o => (o.hasOwnProperty('Total') && obj.Id === o.Id)).Total = obj.Total) 
    
    
    console.log(result);
https://stackoverflow.com/questions/59020315
复制相似问题