【问题标题】:How to add a dependency for an array that is shuffled?如何为混洗的数组添加依赖项?
【发布时间】:2019-02-15 21:25:11
【问题描述】:

我有一个脚本可以对数组中的值进行洗牌。这些值代表可用的人。当它们不可用时,它们将从阵列中移除。我希望使这个数组“动态”,因为它根据工作表中的值的数量调整范围。

我已尝试创建命名范围,但这并不能消除更改命名范围大小的手动任务。从数组中删除一个人将导致空白单元格与其他值一起洗牌。我尝试过使用 .filter() 函数,但在 JS 和应用程序脚本方面我相当业余。

function myFunction() {
  var ss =     SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test Sheet");
  var candidates = ss.getRange("Test Sheet!B2:B10").getValues();
  var arrayValues = ss.getRange("Test Sheet!F1:F12").getValues();


  for (var x = 0; x < arrayValues.length; x++) {
    var range = ss.getRange(1, 6, 12);
    var array = range.getValues();                          
    shuffleArray(array);
    range.setValues(array);
  } 
}
function shuffleArray(array) {
    for (var i = array.length - 1; i > 0; i--) {
        var j = Math.floor(Math.random() * (i + 1));
        var temp = array[i];
        array[i] = array[j];
        array[j] = temp;
  }
}

要么使范围动态化,要么忽略数组中的空白单元格是我的目标。

【问题讨论】:

  • 我可以问你关于ignorings the blank cells in the array 的事吗?例如,如果范围内的值为["a", "b", "", "c", "d"]["", "b", "", "c", "d"],您是否分别需要["b", "d", "a", "c", ""]["b", "d", "c", "", ""]
  • 嗨@Tanaike!在 ["a", "b", " ", "c", "d"] 的情况下,期望的结果将是 ["a", "b", "c", "d"] 的随机化洗牌中省略了空白。这些值代表将“可用”的人。数组中的空白本质上是刚刚被移动到 Google 表格的“不可用”列的人。我希望这有助于澄清我的目标!
  • 感谢您的回复。我发布了一个答案。你能确认一下吗?如果我误解了你想做什么,我很抱歉。届时,能否提供更多信息?例如,这些是示例电子表格以及您想要的输入和输出。我想修改脚本。

标签: arrays algorithm if-statement google-apps-script google-sheets


【解决方案1】:
  • 您希望从var range = ss.getRange(1, 6, 12) 中随机化“F1:F12”的单元格。
  • 例如,如果“F1:F12”的值为["a", "b", " ", "c", "d"],您想像["b", "a", "d", "c"] 一样执行此操作。
    • 您要删除空单元格。

如果我的理解是正确的,那么这个修改呢?我觉得你的情况可以使用randomize()的方法。

修改脚本:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.getRange("Sheet1!F1:F12").randomize();
}

参考:

【讨论】:

  • 非常感谢田池!这非常有效。这可能是由于我普遍缺乏编程/JS/GAS 方面的经验。我对您的解决方案的理解是,我的函数包含空白值,因为它们包含在我定义为 array 的范围内,而您的函数将空单元格发送到 range的底部> ?再次感谢您的帮助,并对我缺乏关于格式和最佳实践的知识表示歉意。
  • @Softserve 那么您的回复。我很高兴你的问题得到了解决。似乎randomize() 的方法在找到空单元格时放入了最后一个元素。我认为这是规范。我对您的评论的理解正确吗?
  • 是的!感谢您的帮助!
猜你喜欢
  • 2012-01-25
  • 2020-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多