我撰寫了一個簡單的迭代器來回圈遍歷 JSON 物件并將物件決議為新形式。這幾乎可以在任何 JS 環境中正常作業。(例如在控制臺中(但是,下面的函式在 AppScript 中執行時回傳一個空陣列。
回傳:[[]、[]、[]、[]、[]]
這個問題似乎是 AppScript 特有的。在我通過 Google Developer Group 提交錯誤之前,我想了解這是否可能是 App Script 特定的預期行為。
var TableData = [["20220301","(none)","(direct)","3","1","1"],["20220301","organic","google","3","1","1"],["20220302","(none)","(direct)","4","2","2"],["20220302","organic","bing","1","1","1"],["20220303","(none)","(direct)","1","1","1"]]
function parseBQData(TableData, request) {
try {
// store the array of dimensions and metrics in a variable called 'fields'
var fields = ["date", "medium", "source", "pageviews", "sessions", "users"]
// create a new empty array to store the parsed data
var newTableData = new Array();
// loop through each row in the TableData
for (var i = 0; i < TableData.length; i ) {
// create a new empty array to store the current row
var wrapper = new Array();
// loop through each column in the row
for (var j = 0; j < fields.length; j ) {
// store the column data in the current row array, using the column header as the key
wrapper[fields[j]] = TableData[i][j];
Logger.log("Wrapper : " wrapper) // This returns "Wrapper : "
}
// add the current row to the new array of parsed data
newTableData.push(wrapper);
}
// return the new array of parsed data
return newTableData;
// if there is an error parsing the data, print the error to the log
} catch (e) {
Logger.log("Error parsing data")
Logger.log(e)
}
}
uj5u.com熱心網友回復:
沒有在 App Script 中嘗試,但可以在瀏覽器 JS 控制臺中正常作業:
var TableData = [["20220301","(none)","(direct)","3","1","1"],["20220301","organic","google","3","1","1"],["20220302","(none)","(direct)","4","2","2"],["20220302","organic","bing","1","1","1"],["20220303","(none)","(direct)","1","1","1"]]
function parseBQData(TableData, request) {
try {
var fields = ["date", "medium", "source", "pageviews", "sessions", "users"];
var newTableData = new Array();
for (var i = 0; i < TableData.length; i ) {
var wrapper = new Array();
for (var j = 0; j < fields.length; j ) {
wrapper[fields[j]] = TableData[i][j];
console.log("Wrapper : " wrapper)
}
newTableData.push(wrapper);
}
return newTableData;
} catch (e) {
console.log("Error parsing data")
console.log(e)
}
}
parseBQData(TableData, 0);
日志:
Wrapper :
(5) [Array(0), Array(0), Array(0), Array(0), Array(0)]
0: [date: '20220301', medium: '(none)', source: '(direct)', pageviews: '3', sessions: '1', …]
1: [date: '20220301', medium: 'organic', source: 'google', pageviews: '3', sessions: '1', …]
2: [date: '20220302', medium: '(none)', source: '(direct)', pageviews: '4', sessions: '2', …]
3: [date: '20220302', medium: 'organic', source: 'bing', pageviews: '1', sessions: '1', …]
4: [date: '20220303', medium: '(none)', source: '(direct)', pageviews: '1', sessions: '1', …]
length: 5
所以我最好的猜測,檢查記錄器列印引數型別,也許Logger.log("Wrapper : ", wrapper);?
uj5u.com熱心網友回復:
In App ScriptTableData是在全域范圍內定義的。但是TableData傳遞給的引數parseBQData在函式范圍內。如果我嘗試在全域范圍內運行您的腳本,我會得到function parseBQData(TableData, request)因為未定義。您可以通過簡單地解決此問題:TableDataTypeError: Cannot read property 'length' of undefinedTableData
function parseBQData(request) {
這不是錯誤。
我還發現了這篇文章JavaScript 函式引數和范圍
uj5u.com熱心網友回復:
相同的輸出但更簡單
function parseBQData() {
const iA = [["20220301", "(none)", "(direct)", "3", "1", "1"], ["20220301", "organic", "google", "3", "1", "1"], ["20220302", "(none)", "(direct)", "4", "2", "2"], ["20220302", "organic", "bing", "1", "1", "1"], ["20220303", "(none)", "(direct)", "1", "1", "1"]]
const fields = ["date", "medium", "source", "pageviews", "sessions", "users"];
iA.unshift(fields)
Logger.log(JSON.stringify(iA));
}
Execution log
10:25:24 AM Notice Execution started
10:25:25 AM Info [["date","medium","source","pageviews","sessions","users"],["20220301","(none)","(direct)","3","1","1"],["20220301","organic","google","3","1","1"],["20220302","(none)","(direct)","4","2","2"],["20220302","organic","bing","1","1","1"],["20220303","(none)","(direct)","1","1","1"]]
10:25:26 AM Notice Execution completed
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/497617.html
