JavaScript字符串到对象错误?随机阵列变量未透露



我想通过随机创建一个数组创建一个数组,但是我从javascript开始。这是我的问题。

//array
var t = ["house","pen","table","eletronic"];
//-> selected a name option 0
var w = t[0]; // selected
var x = w;
var y = 0 to 3; // random
var house =["red","blue","orange","black"];
var pen   =["silver", "gold", "cooper","plastic"];
var table =["marble","oak","yep","pine"];
var eletro=["computer","mobile","mac","tablet"];
// what i wish
var z = house[0]; // return red  // x = typeof return object
//x this is the error type string not recognize list array query
var z = x[y]; // x = typeof return string 
var z = "house"[0]; // return h - return string - not object
//after make a default
var a = x[y]; //y != y
var b = x[y]; //y != y
document.getElementById("demo1").innerHTML=z; // blue house;
document.getElementById("demo2").innerHTML=a; // silver pen;
document.getElementById("demo3").innerHTML=b; // marble table;
<p id "demo1"></p>
<p id "demo2"></p>
<p id "demo3"></p>

我认为我必须将双引号 - " house" - 字符串转换为对象 - house-以转换为var,然后在喂食系统之前?

我不是100%确定您在这里问什么,但是我认为您想要使用2D阵列可以实现的行为 -

const t = [["red","blue","orange","black"], ["silver", "gold", "cooper","plastic"], ["marble","oak","yep","pine"], ["computer","mobile","mac","tablet"]]
const [rand1, rand2] = [Math.floor(Math.random() * t.length), Math.floor(Math.random() * t[0].length)]
console.log(t[rand1][rand2])

如果您要寻找的是,我还不清楚,但是一个解决方案可能是构建数据,以便更容易获得:

const items = {
  house: ["red","blue","orange","black"],
  pen: ["silver", "gold", "cooper","plastic"],
  table:  ["marble","oak","yep","pine"],
  eletro: ["computer","mobile","mac","tablet"]
}
const randomChoice = list => list[Math.floor(list.length * Math.random())]
const randomObject = (items) => {
  const itemType = randomChoice(Object.keys(items))
  const modifier = randomChoice(items[itemType])
  return `${modifier} ${itemType}`
}
randomObject(items) //=> "marble table" or "plastic pen", etc.

更新

评论要求选择某种类型的随机元素。这种变化将允许:

const randomOfType = (items, itemType) => {
  const modifier = randomChoice(items[itemType])
  return `${modifier} ${itemType}`
}
const randomObject = (items) => randomOfType(items, randomChoice(Object.keys(items)))
randomOfType(items, 'table') //=> "oak table" or "marble table", etc.

您可以使用 eval()函数获取对象引用,但是它可能会导致毛茸茸的问题,因此最好使用其他选项,例如switch语句:

//array
var t = ["house","pen","table","electronic"];
var house = ["red","blue","orange","black"];
var pen = ["silver", "gold", "cooper","plastic"];
var table = ["marble","oak","yep","pine"];
var electronic = ["computer","mobile","mac","tablet"];
var w = Math.floor(Math.random() * 3); // random type index (0 to 3)
var x = t[w]; // name of the random type
var y = Math.floor(Math.random() * 3); // random option (0 to 3)
switch (w) { // use the appropriate object based on type index
  case 0: z=house[y]; break;
  case 1: z=pen[y]; break;
  case 2: z=table[y]; break;
  case 3: z=electronic[y]; break;
}
console.log(w, z);
var z = z + ' ' + x // appending "house" to color
console.log(z);
document.getElementById("demo1").innerHTML=z;
<p id="demo1"></p>
<p id="demo2"></p>
<p id="demo3"></p>

最新更新