Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何查找已应用if语句的行的最大值和最小值?_Javascript_Google Apps Script_Google Sheets_Max_Min - Fatal编程技术网

Javascript 如何查找已应用if语句的行的最大值和最小值?

Javascript 如何查找已应用if语句的行的最大值和最小值?,javascript,google-apps-script,google-sheets,max,min,Javascript,Google Apps Script,Google Sheets,Max,Min,所以我昨天得到了这个,它工作得非常出色,但是我被要求在我下面的函数应用的行中加粗最小值和最大值。我有3个不同的数据集,在不同的行上有不同的值,所以我不能要求它在第7行加粗。我需要证明这可以应用于任何给定的数据。是否有人知道如何实现这一点,我的数据是C3:W16之间的所有3个数据集,以避免混淆 函数searchOutput(){ var sheet=SpreadsheetApp.getActiveSheet(); var数据=sheet.getRange(“C3:W16”).getValues(

所以我昨天得到了这个,它工作得非常出色,但是我被要求在我下面的函数应用的行中加粗最小值和最大值。我有3个不同的数据集,在不同的行上有不同的值,所以我不能要求它在第7行加粗。我需要证明这可以应用于任何给定的数据。是否有人知道如何实现这一点,我的数据是C3:W16之间的所有3个数据集,以避免混淆

函数searchOutput(){
var sheet=SpreadsheetApp.getActiveSheet();
var数据=sheet.getRange(“C3:W16”).getValues();
data.forEach(函数(第一行)
{row.forEach(函数(cell,j)
{如果(单元格>=5&&row[j+1]<5){sheet.getRange(i+3,j+3,1,2).setFontWeight(“粗体”)
{if(cell Math.max(…row)).getRange(i+3,j+3,1,1).setFontWeight(“粗体”)
{if(cell Math.min(…row)).getRange(i+3,j+3,1,1).setFontWeight(“bold”)})

}
优化处理多行有三个步骤:

  • 使用批量getter方法从工作表中获取值、格式或其他状态的数组
  • 处理并更新获取的数组
  • 使用批量设置器方法将更新的值、格式或其他状态写回工作表
  • 这是必要的b/c在循环中多次调用工作表方法,如
    getRange()
    setFontWeight()
    ,在计算上非常昂贵

    因此,您首先需要弄清楚哪些批量getter和setter方法适用于您的用例

    在您的场景中,您需要在一行中找到值的最小值和最大值,因此这是必须的。你想更新这些单元格的字体大小,所以也有必要

    提示如果需要为其他资源找到getter或setter方法,请查看该对象的文档。一般规则是,任何前缀为
    get
    set
    并以
    s
    结尾的方法都是批量getter或setter方法

    既然您知道了需要什么,那么编写代码就相当简单了:

    函数boldMinMax(){
    var range=SpreadsheetApp.getActiveSheet().getRange(“C3:W16”);
    //使用getter方法批量获取行值数组和字体权重数组
    var valueRows=range.getValues();
    var fontWeightRows=range.getFontWeights();
    //处理获取的数组更新最小和最大单元格的字体权重
    valuesRows.forEach(函数(valueRow、rowIndex){
    //每行只需计算一次最小值和最大值
    var min=Math.min(…valueRow);
    var max=数学最大值(…valueRow);
    //查找并更新fontWeightRow
    var fontWeightRow=fontWeightRows[rowIndex];
    valueRow.forEach(函数(值、单元格索引){
    如果(值==最小值| |值==最大值){
    fontWeightRow[cellIndex]=“粗体”;
    }
    });
    });
    //将更新的字体权重写回工作表
    range.setFontWeights(fontWeightRows);
    }
    

    这应该足以让您进行分类。

    如果存在多个最大值和最小值怎么办?例如,假设行中的最大值为10,您有两个10。你想把它们都加粗吗?是的,但是当函数沿着列运行时,我需要它先找到最大值,然后再找到最小值。如果最小值在最大值之前,那么表示的数据将意味着该数据表示的功率输出将不起作用。不幸的是,这对我来说非常混乱。您能否提供一个示例输入和预期输出?它不必是全量程。只需提供3x3虚拟单元的屏幕截图,并向我们显示预期输出。一张图片抵得上一千个单词,所以我的函数,你看到的是使值大于5,你可以很容易地找到最大或最小的一行使用和。扩展语法将自动将数组的内容作为参数映射到这些函数。然后可以循环行中的项目,检查是否与最小值或最大值相等,并更新单元格的格式。