2017-03-05 44 views
1

我遇到了我的代码有问题。我有5个对象,我想随机选择一个对象并从中获取数据。我可以使用c1['cn']来调用其中一个对象的数据,所以我想如果我从1到5中选择一个数字,并用随机的数字替换它将调用该对象的数据。从5个对象之一随机获取数据

var ram = Math.floor((Math.random() * 5) +1); 
var ref = 'c' + ram; 
console.log(ref['cn']); 

的执行console.log是说“未定义”

谁能告诉我什么,我做错了。谢谢。

你可以在代码片段中看到我的代码。

function cardsLab (cname, dis, t1, t2, t3){ 
 
\t this.cn = cname; 
 
\t this.d = dis; 
 
\t this.s1 = t1; 
 
\t this.s2 = t2; 
 
\t this.s3 = t3; 
 
} 
 
var c1 = new cardsLab('card No1', 'blar', 8, 5, 10); 
 
var c2 = new cardsLab('card No2', 'blar', 6, 10, 9); 
 
var c3 = new cardsLab('card No3', 'blar', 7, 5, 3); 
 
var c4 = new cardsLab('card No4', 'blar', 10, 4, 9); 
 
var c5 = new cardsLab('card No5', 'blar', 8, 6, 7); 
 

 

 
var ram = Math.floor((Math.random() * 5) +1); 
 
var ref = 'c' + ram; 
 
var x = ref+"['cn']"; 
 
var z = x; 
 
console.log(x); 
 
console.log(ref['cn']); 
 
console.log(c1['cn']);

+0

试试'窗口[参考] ['CN ']'或'this [ref] ['cn']'。 – Titus

回答

2

你最好不要把所有的卡在数组中。它使得动态引用它变得更容易。它甚至意味着你可以使用.length属性算来,而不需要硬编码数字5

像这样:

function cardsLab (cname, dis, t1, t2, t3){ 
 
\t this.cn = cname; 
 
\t this.d = dis; 
 
\t this.s1 = t1; 
 
\t this.s2 = t2; 
 
\t this.s3 = t3; 
 
} 
 
var cards = []; 
 
cards[0] = new cardsLab('card No1', 'blar', 8, 5, 10); 
 
cards[1] = new cardsLab('card No2', 'blar', 6, 10, 9); 
 
cards[2] = new cardsLab('card No3', 'blar', 7, 5, 3); 
 
cards[3] = new cardsLab('card No4', 'blar', 10, 4, 9); 
 
cards[4] = new cardsLab('card No5', 'blar', 8, 6, 7); 
 

 

 
var ram = Math.floor((Math.random() * cards.length)); 
 
var x = cards[ram]; 
 
console.log(x);

+0

谢谢。这很好。 – DigitalOedo

相关问题