给定用户字符串输入,如何检查对象是否在数组中

时间:2018-01-26 06:18:05

标签: javascript

我正在尝试为不和谐构建参考机器人,可用于查找信息(in this case, cars),并且我trouble有一个概念。用户capable运行命令以查找汽车信息。用户提供的命令可能为$car1car1将存储在variable inputCar中。数组validCars包含所有可以查找的汽车,car1就是其中之一。 car1在这种情况下显然不是字符串,而是具有多个字段的对象,但我需要弄清楚如何在给定用户输入字符串的情况下查找有关汽车的信息。我的问题有两个:

1)我知道外部if语句不起作用,因为inputCar是用户输入的字符串,而validCars数组中的对象是对象。如何正确检查用户输入的内容(in string format)是否与其中一个对象的名称相匹配?

2)现在假设我可以在给定用户输入的情况下确定汽车是否存在于validCars中,如何在给定用户输入的情况下访问字段(name, model, color)以便打印它们? / p>

这可能不是accomplish我尝试做的最佳方式,因此我们非常感谢任何建议。

var validCars = [car1, car2, car3, car4];

var car1 = {
  name:"Corvette Stringray",
  model:"2018",
  color:"red"
};

/***
 ***  car2, car3, and car4 all have the same setup as car1, just different values.
***/

// Scan each message (client.on is discord.js jargon)
client.on("message", (message) => {

  // Potential car name entered by user (message.content is discord.js jargon, 
  //it is just returning the string the user entered without the leading command prefix).
 // e.g. the value in inputCar might be "car1" if the user wanted to see info on car1.
  var inputCar = message.content.substr(1);

  // SHOULD check if this is an actual car. This if statement won't work because inputCar is a string,
  // and the values in validCars are not strings but objects.
  if (validCars.includes(inputCar) == true)
  {
    // Condition when car1 is entered (there would be other cases for the other cars)
    if (message.content == config.prefix + "car1")
    {
      // Print car1 info including name, model, and color
    } 
  }
  else 
  {
    // Invalid car was entered by user.
  }
});

1 个答案:

答案 0 :(得分:1)

您可能希望将汽车ID与汽车存储在地图中:

 const carByKey = new Map([
    ["car1", car1],
    /*...*/
 ]);

然后很容易上车:

  if(carByKey.has(message)){
    const car = carByKey.get(message);
    console.log(car.name);
    //...
  }

如果你真的想获得具有相同名称并且在全局范围内的javascripts变量,那么可以使用window / global(取决于你的环境):

 if(message in window){
   const car = window[message];
 }

....但这是一个非常糟糕的主意。