0

我正在尝试编写一个cisco webex机器人,让所有人都进入空间(房间)并随机只写一个名字。我有这个代码

framework.hears("daily host", function (bot) {
  console.log("Choosing a daily host");
  responded = true;
  // Use the webex SDK to get the list of users in this space
  bot.webex.memberships.list({roomId: bot.room.id})
    .then((memberships) => {
      for (const member of memberships.items) {
        if (member.personId === bot.person.id) {
          // Skip myself!
          continue;
        }

        let names = (member.personDisplayName) ? member.personDisplayName : member.personEmail;
        let arrays = names.split('\n');
        var array = arrays[Math.floor(Math.random()*items.length)];
        console.log(array)
        bot.say(`Hello ${array}`);

       }
})
    .catch((e) => {
      console.error(`Call to sdk.memberships.get() failed: ${e.messages}`);
      bot.say('Hello everybody!');
    });
});

但这不起作用。let arrays = names.split('\n');在我使用空格分隔并且没有逗号之后也命名。我认为是因为什么代码不起作用控制台日志的输出:

[ '乔治华盛顿' ]

[ '约翰' ]

['威廉霍华德塔夫脱']

现在的主要问题是如何将输出转换为数组?

4

2 回答 2

0

以下是如何从您的数据中获取单个名称,并确保它是一个字符串。数组中只有四个名称,因此如果您始终获得相同的名称,请多次运行该代码段。

// A list of names. Notice that Arraymond is an array; the other names are strings.
const names = [ 'George Washington', 'John',  'William Howard Taft', ['Arraymond'] ];

// Randomize the names
const randomNames = names.sort(() => Math.random() - 0.5);

// Get the first name. Make sure the name is a string (not an array)
const name = randomNames[0].toString();
 
console.log(name)

提示:不要将您的数组命名为“array”或“arrays”——这没有意义。使用良好的命名约定和有意义的变量名,以帮助其他人理解代码在做什么。

于 2021-11-25T07:51:37.740 回答
0

那是因为 arrays[Math.floor(Math.random()*items.length)] 只分配长度为 3 的数组。您需要随机化索引并推送到数组或在原始数组上使用排序函数

 var array = arrays.sort((a,b)=>{
    return Math.floor(Math.random()*arrays.length);
 });

如果您希望根据您的问题获得输出,您可以使用 reduce 而不是 sort。

var arrays = [ 'George Washington', 'John',  'William Howard Taft'];
var array = arrays.reduce((a,i)=>{
    if(!a) a = [];
        a.splice(Math.floor(Math.random()*arrays.length), 0, [i]);
    return a;
 },[]);
于 2021-11-23T15:12:16.820 回答