如何在Telegram中对任意层数嵌套数组生成逐行输出内容
解决方案
你可以直接通过数组的map+join方法实现任意长度数组的自动换行拼接,无需手动指定索引:
核心修改点
你原来手动拼接answer的写法仅支持固定长度的数组,替换为如下写法即可适配任意数量的嵌套数组场景:
const answer = ndata.map(item => item.join(',')).join('%0A');
逻辑说明:
- 你已经通过
masdata.flat()把三层嵌套的数组打平为一维数组,每个元素都是[字符串, 数字]格式的二元数组 map(item => item.join(','))会遍历所有二元数组,将每一项拼接为A1,10这类用逗号分隔的字符串- 外层
join('%0A')会自动用换行符连接所有拼接好的字符串,不管数组有多少元素都能自动适配
优化建议
为了避免文本中存在特殊字符时请求报错,建议拼接URL时对文本参数做URL编码,修改sendMessage函数如下:
function sendMessage(chat_id, answer) { var url = telegramUrl + "/sendMessage?chat_id=" + chat_id + "&text=" + encodeURIComponent(answer); var response = UrlFetchApp.fetch(url); }
完整修改后代码
const masdata=[[["A1",10],["A2",20],["A3",30]], [["B1",50],["B2",60],["B3",70]], [["C1",100],["C2",150],["C3",200]], [["D1",25],["D2",152],["D3",457]], [["E1",18],["E2",42],["E3",55]]]; const ndata = masdata.flat(); const answer = ndata.map(item => item.join(',')).join('%0A'); function sendMessage(chat_id, answer) { var url = telegramUrl + "/sendMessage?chat_id=" + chat_id + "&text=" + encodeURIComponent(answer); var response = UrlFetchApp.fetch(url); }
运行后输出的answer完全匹配预期结果。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

