首页 > 解决方案 > 我如何返回结果而不是两者

问题描述

我有这段代码应该在附加到工作表之前处理一个条件。

我只想附加一个值,即如果数据有两个匹配项,则只有一个应该附加到工作表中,另一个被忽略,循环继续到下一项。

如果它们符合条件,这是附加的代码。我用了|| 操作员。

    if (contents.length > 0) {
        var dstSheet = SpreadsheetApp.getActive().getSheetByName('Projects');
        var values = contents.map(e => ([e.email, e.role]));
        var new_values = values.filter(item => {
                                       
            if (item[1] === 'Project Leader' || item[1] === 'Senior Project Leader') {
                return true
            }

        })
       dstSheet.getRange(3, 8, new_values.length, new_values[0].length).setValues(new_values); 
    }
}

这是我研究过的一个,但它仍然传递了两个值。本质上,我希望追加项目负责人或高级项目负责人,而不是两者。

    if (contents.length > 0) {
        var dstSheet = SpreadsheetApp.getActive().getSheetByName('Projects');
        var values = contents.map(e => ([e.email, e.role]));
        var new_values = values.filter(item => {
                                       
            if ((item[1] === 'Project Leader' && item[1] != 'Senior Project Leader') || (item[1] === 'Senior Project Leader'&& item[1] != 'Project Leader')) {
                return true
            }

        })
       dstSheet.getRange(3, 8, new_values.length, new_values[0].length).setValues(new_values); 
    }
}

标签: javascriptarraysif-statementgoogle-apps-scriptgoogle-sheets

解决方案


我的 Javascript 真的很生锈,所以我相信你可以找到更优雅的解决方案。因此,这将根据谁是第一个获得的值,将所有“项目负责人”或“高级项目负责人”添加到 new_values。

    if (contents.length > 0) {
    var dstSheet = SpreadsheetApp.getActive().getSheetByName('Projects');
    var values = contents.map(e => ([e.email, e.role]));
    var role = undefined;
    var new_values = values.filter(item => {
                                   
        if ((undefined === role && (item[1] === 'Project Leader' || item[1] === 'Senior Project Leader')) || (role === item[1])) {
            role = item[1];
            return true
        }

    })
   dstSheet.getRange(3, 8, new_values.length, new_values[0].length).setValues(new_values); 
}

推荐阅读