0

Google Apps Script を使用して、日付の配列を取得し、それらを Google スプレッドシートのセルに貼り付けようとしています。

データを配列に入れることができました。ロガーを使用すると、日付と配列の長さが増加していることがわかります。

.setValues を使用して配列の内容をスプレッドシートに貼り付けると、すべてのセルに同じ値が表示されます。(コード内の oldestDate は、以前に設定された別の日付変数です。new Date(date string)コンストラクターを使用して作成されるため、有効な日付です。

  var today = new Date();
  var testDate = new Date(oldestDate);
  Logger.log(oldestDate);
  Logger.log(testDate);
  Logger.log("Loop Starts");
  var storage = [];
  var cols=0
  while (Date.parse(testDate) < Date.parse(today))
  {
    storage.push(testDate);
    Logger.log(testDate); //This is giving the same output as vvvvv
    Logger.log(storage[cols]); //This is giving the same output as ^^^^^
    Logger.log("Storage Length: "+storage.length); //This is incrementing
    testDate.setDate(testDate.getDate() +1);
    cols++;
  }

  var expensesDump = expenses.getSheetByName("Dump");
  expensesDump.getRange(1, 1, 1, cols).setValues([storage]); //This is populating every cell with "27/05/2013"
4

1 に答える 1

1

オブジェクト (この場合は日付オブジェクト) を配列にプッシュすると、そのオブジェクトへの参照がプッシュされます。

オブジェクトはjavascriptの深いコピーまたは浅いコピーで配列にプッシュされますか?

そのリンクの 2 番目の回答は、push() によって参照される変数に新しいオブジェクトが割り当てられた場合、push() の以前の呼び出しから「切断」されることを示唆しています。したがって、解決策は次のようになります (while ループ内)。

testDate = new Date(testDate);
testDate.setDate(testDate.getDate()+1);
于 2013-05-26T11:03:35.793 に答える