2017-03-05 61 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