0

私が達成しようとしているのは、列 A の人々のリストからランダムに選択することですが、選択されたら、リストから削除する必要があります。アイデアは、毎週誰かをランダムに選択する名簿を作成することですが、選択されたらその人を削除します(そして、0になると配列を再作成します)

Example

Paul
David
John
Matt

random(A1:A4) を実行すると、David が選択されますが、次に関数を実行すると、配列は A1:A4 から再度構築されるため、David は削除されません。

ピックを追跡するために2番目の列を追加してから、それらを配列から削除しようとしましたが、行ったことを保持せずに配列から1つの値しか削除できませんでした

Example

List of Users      Tracking        Result (print all values)
Paul                               John   David,Paul,Matt
David              John            David  Paul,Matt
John               David           Matt   Paul,John
Matt               Matt            David  Paul,John

結果はすべての値ではありませんが、私が抱えている論理的な問題を示すためにすべての値を含めました。追跡列では、最初の空白を残して、追跡フィールドの値が結果から取得した値になるようにしました (通常、結果は 1 つの値のみを取得します)..so B2 = C1

これを行う方法についていくつかの指針を得ることができますか。(google-apps-script)

ここでコードを求める人のために、それは

function random(a,b) {
  var listPeople = new Array();
  for (var i = 0; i < a.length; i++) {
    var row = a[i];
    for (var j = 0; j < row.length; j++) {
      var value = row[j];
      if (value) {
        listPeople.push(value); 
      }
    }
  }
//deleting someone
  var trackPeople = listPeople.slice(0);
  for (var i = 0; i < trackPeople.length; i++) {
    if (trackPeople[i] == b) {
      trackPeople.splice(i,1);
    }
  } 
// Returning a persons name
  if (trackPeople.length > 0) {
    var pick = Math.floor(Math.random() * trackPeople.length);
    return trackPeople[pick];
  }
}
4

1 に答える 1