実現したいこと
現在発生しているエラー
TypeError: Cannot read properties of undefined (reading 'map')
を解消したいです。
前提
APIで取得したデータを使い、配列内のオブジェクトから特定のkeyの値のみの配列を作る、ということをしていました。
GAS
1function myFunction() { 2 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet = spreadsheet.getSheetByName('テスト'); 4 var values = sheet.getDataRange().getValues(); 5 var LastRow = sheet.getLastRow(); 6 7 for(let i =1; i<LastRow; i++){ 8 var ApiUrl = 'https://apiurl' + values[i][0] 9 var ApiCell = sheet.getRange(i+1,2); 10 var res = UrlFetchApp.fetch(ApiUrl).getContentText(); 11 var res_json = JSON.parse(res); 12 var res_json_result1 = res_json.result; 13 var res_json_result2 = res_json_result1.items; 14 var res_json_result3 = res_json_result2[0]; 15 var p_code = res_json_result3.p_code; 16 var user = res_json_result3.username; 17 var date = res_json_result3.date; 18 var StartDate = date.start; 19 var info = res_json_result3.iteminfo; 20 var Data1Obj = info.data1; 21 var Data1 = Data1Obj.map((obj)=>obj.name); 22 var Data2Obj = info.data2; 23 var Data2 = Data2Obj.map((obj)=>obj.name); 24 var Data3Obj = info.data3; 25 var Data3 = Data3Obj.map((obj)=>obj.name); 26 var Data4Obj = info.data4; 27 var Data4 = Data4Obj.map((obj)=>obj.name); 28 29 console.log(Data1) 30 console.log(Data2) 31 console.log(Data3) 32 console.log(Data4) 33 } 34} 35
取得したデータの全体像console.jog(res_json)が以下です。
{ request: { parameters: { api_id: 'apiid', username: 'USERNAME', email: 'xyz@example.jp', output: 'json' } }, result: { status: 200, result_count: 1, items: [ { p_code: 'xxx', p_name: '', username: 'USERNAME', email: 'xyz@example.jp', date: { start: '2022-11-5', finish: '2022-11-11' }, iteminfo: { data1: [ { id: 1111, name: '北海道' }, { id: 1112, name: '青森' }, { id: 1113, name: '岩手' }, { id: 1114, name: '秋田' }, { id: 1115, name: '福島' }, { id: 1116, name: '山形' }, { id: 1117, name: '新潟' } ], data2: [ { id: 4600, name: '北' } ], data3: [ { id: 1111018, name: '北海道', ruby: 'ほっかいどう' }, { id: 1112018, name: '青森', ruby: 'あおもり' }, { id: 1113018, name: '岩手', ruby: 'いわて' }, { id: 1114018, name: '秋田', ruby: 'あきた' } ], data4: [ { id: 7020, name: '東北' } ] }
上記のようにしたところ、ログがそれぞれ
[ '北海道', '青森', '岩手', '秋田', '福島', '山形', '新潟' ]
[ '北' ]
[ '北海道', '青森', '岩手', '秋田' ]
[ '東北' ]
と出力されたのですが、質問タイトルにも書いたエラーが発生してしまいます。
var Data3 = Data3Obj.map((obj))=>obj.name);
エラーとなっているのは、この部分のようです。
mapは、keyが3つ以上あるオブジェクトには機能しないなんてことありますでしょうか、、
発生している問題・エラーメッセージ
TypeError: Cannot read properties of undefined (reading 'map')
該当のソースコード
GAS
1function myFunction() { 2 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet = spreadsheet.getSheetByName('テスト'); 4 var values = sheet.getDataRange().getValues(); 5 var LastRow = sheet.getLastRow(); 6 7 for(let i =1; i<LastRow; i++){ 8 var ApiUrl = 'https://apiurl' + values[i][0] 9 var ApiCell = sheet.getRange(i+1,2); 10 var res = UrlFetchApp.fetch(ApiUrl).getContentText(); 11 var res_json = JSON.parse(res); 12 var res_json_result1 = res_json.result; 13 var res_json_result2 = res_json_result1.items; 14 var res_json_result3 = res_json_result2[0]; 15 var p_code = res_json_result3.p_code; 16 var user = res_json_result3.username; 17 var date = res_json_result3.date; 18 var StartDate = date.start; 19 var info = res_json_result3.iteminfo; 20 var Data1Obj = info.data1; 21 var Data1 = Data1Obj.map((obj)=>obj.name); 22 var Data2Obj = info.data2; 23 var Data2 = Data2Obj.map((obj)=>obj.name); 24 var Data3Obj = info.data3; 25 var Data3 = Data3Obj.map((obj)=>obj.name); 26 var Data4Obj = info.data4; 27 var Data4 = Data4Obj.map((obj)=>obj.name); 28 29 console.log(Data1) 30 console.log(Data2) 31 console.log(Data3) 32 console.log(Data4) 33 } 34} 35
試したこと
合っているかわからないのですが、エラーになっている部分を
GAS
1var Data3 = Data3Obj.find((item) => item.name);
に変えてみたところ、エラーが以下になっただけでした。
TypeError: Cannot read properties of undefined (reading 'find')
回答1件
あなたの回答
tips
プレビュー