Advertisements
In the following Google Apps Script code, I want to write three keys to the sheet key_1
,key_3.subkey
and key_4[1].key
. How do fix my code to show the subkey
and second element of key_4
as well?
function main() {
const data = [{"key_1":10,"key_2":20,"key_3":{"subkey":30},"key_4":[{"key":41},{"key":42}]},{"key_1":40,"key_2":50,"key_3":{"subkey":60},"key_4":[{"key":43},{"key":44}]}];
const keys = ["key_1","key_3.subkey","key_4[1].key"];
print(data, keys);
}
function print(data, keys) {
ss = SpreadsheetApp.getActiveSpreadsheet();
sheet = ss.getSheetByName("Test");
sheet.clear();
for (let i=0; i<data.length; i++) {
arr = Array(keys.map(k => data[i][k]));
sheet.getRange(i+1,1,1,2).setValues(arr);
}
}
Solution
function main() {
const data = [{"key_1":10,"key_2":20,"key_3":{"subkey":30},"key_4":[{"key":41},{"key":42}]},{"key_1":40,"key_2":50,"key_3":{"subkey":60},"key_4":[{"key":43},{"key":44}]}];
const keys = ["key_1","key_3.subkey","key_4.1.key"];
print(data, keys);
}
function print(data, keys) {
for (let i=0; i < data.length; i++) {
let arr = keys.map(k => k.split('.').reduce((a, b) => a[b], data[i]));
Logger.log(arr);
}
}
>Solution :
You could use a format where all subkeys are separated by .
. Then, you can split the string on .
and use Array#reduce
to traverse the nested data structure.
function main() {
const data = [{"key_1":10,"key_2":20,"key_3":{"subkey":30},"key_4":["","4a"]},{"key_1":40,"key_2":50,"key_3":{"subkey":60},"key_4":["","4b"]}];
const keys = ["key_1","key_3.subkey","key_4.1"];
print(data, keys);
}
function print(data, keys) {
for (let i=0; i < data.length; i++) {
let arr = keys.map(k => k.split('.').reduce((a, b) => a[b], data[i]));
console.log(arr);
}
}
main();