我正在尝试使用电报bot api将按钮发送到我的电报机器人。目前,为了创建按钮,我必须对字段中的值进行硬编码,但是我想要通过数组动态创建内联键盘按钮,并将数组索引和数组值作为参数传递。我该怎么办呢? 这是我到目前为止所尝试的。
var menu =["Nightclub","Parks","Restaurants","Telecom","Internet"];
var options = {
reply_markup: JSON.stringify({
inline_keyboard: [
[{ text: 'Some button text 1', callback_data: '1' }],
[{ text: 'Some button text 2', callback_data: '2' }],
[{ text: 'Some button text 3', callback_data: '3' }]
]
})
};
假设我想在我的选项中动态传递菜单数组中的数据。我该怎么做呢?
答案 0 :(得分:4)
如果我理解你的话。
我们将在这里使用Array.map函数使用菜单数组创建一个数组。
var menu = ["Nightclub", "Parks", "Restaurants", "Telecom", "Internet"];
var options = {
reply_markup: JSON.stringify({
inline_keyboard: menu.map((x, xi) => ([{
text: x,
callback_data: String(xi + 1),
}])),
}),
};
结果是:
{
reply_markup: JSON.stringify({
inline_keyboard: [
[{
text: 'Nightclub',
callback_data: '1'
}],
[{
text: 'Parks',
callback_data: '2'
}],
[{
text: 'Restaurants',
callback_data: '3'
}],
[{
text: 'Telecom',
callback_data: '4'
}],
[{
text: 'Internet',
callback_data: '5'
}],
],
}),
}
答案 1 :(得分:2)
您也可以尝试使用简单的for循环:
var keyboard = [];
var menu = ['Nightclub', 'Parks', 'Restaurants', 'Telecom', 'Internet'];
for (var i = 0; i < menu.length; i++) {
keyboard.push([{'text': menu[i], 'callback_data': (i + 1)}]);
}
{
'reply_markup': JSON.stringify({
inline_keyboard: keyboard
})
}
/* The result will be:
{
'reply_markup': JSON.stringify({
inline_keyboard: [
[{'text': 'Nightclub', 'callback_data': '1'}],
[{'text': 'Parks', 'callback_data': '2'}],
[{'text': 'Restaurants', 'callback_data': '3'}],
[{'text': 'Telecom', 'callback_data': '4'}],
[{'text': 'Internet', 'callback_data': '5'}]
]
*/