2012-01-09 28 views
1

在我的第一個JS應用程序BlackJack上工作,並且一直在這一點上停留了一段時間:我想要做的是如果從數組中調用var a,它可能= 11或1,具體取決於總值。設置所述數組後,沒有辦法更改數組中項目的值嗎?如何在數組創建後將其轉換爲var?

var j = 10; 
    var q = 10; 
    var k = 10; 
    var a; 
    var totalPlayer = 12; 
    var cards = [2, 2, ..., a, a, a]; 
function processIt() { 
    playerCard1 = cards[48]; //this is calling for var a form the array 
    if (totalPlayer > 11) { 
     a = 1; 
    } else { 
     a = 11; 
    } 
    var cpu1 = document.getElementById("cpu1"); 
    cpu1.innerHTML = playerCard1; //this is calling for var a form the array 
    } 

我也試過把它轉換成刺,然後回到var,失敗。

+2

有,但數組中的值不是'a';它們是'a'的值的副本。 – 2012-01-09 16:50:07

+0

請澄清你到底想要達到什麼,爲什麼。 – PointedEars 2012-01-09 17:41:26

回答

2

如果我讀正確,你已經設置了數組

var cards = [2, 2, ..., a, a, a]; 

,現在你要改變所有這些a的?

不幸的是(因爲a是一個原語),您必須手動更改當前等於a的數組中的值,並將它們設置爲更新後的值。

for (var i = 0, max = cards.length; i < max; i++) 
    if(cards[i] === a) 
     cards[i] = newValue; 

編輯

至於跳所指出的,要知道,如果a等於2,然後所有指標陣列中等於2將被替換,那些最初的幾個指標是您手動設置爲2,並且還將這些索引設置爲a。但是既然你說a將會是1或者11,那麼看起來你已經設置好了,這樣不會成爲問題。

+1

我不同意。這將取代其他具有相同值的索引! – hop 2012-01-09 17:06:07

+0

@hop - 是的,它會。我會更新我的答案,確保用戶知道這一點。 – 2012-01-09 17:06:51

0

以下行:

var cards = [2, 2, ..., a, a, a]; 

... 副本價值a到最後三個陣列位置。這些值與a本身沒有任何關係。更改a後面有對陣列沒有影響。它必須手動更新:

if (totalPlayer > 11) { 
    a = 1; 
} else { 
    a = 11; 
} 
cards.splice(-3, 3, a, a, a); 
1

你不能做你所期望的這種方式。

var a = 1; 
var cards = [2, 2, a, a, a]; 
a = 5; 
alert(cards); // This should print 2,2,5,5,5 is what you expect. 
       // But, it will only print 2,2,1,1,1 

您可以存儲您爲其設置值爲'a'的所有索引。畢竟,你正在構建數組,它應該不會成爲你的障礙。

在我們的例子中,你將有另一個數組

var aIndexes = [2,3,4]; 

然後您可以更改卡陣列的價值像下面。

if (totalPlayer > 11) { 
    a = 1; 
} else { 
    a = 11; 
} 
for(var i =0; i< aIndexes.length; i++){ 
cards[i] = a; 
} 
0
var a; 
… 
var cards = [2, 2, ..., a, a, a]; 

值的aArray實例作爲該陣列的元件的創作的時間,不某種指針的a。它相當於這裏

var cards = [2, 2, ..., undefined, undefined, undefined]; 

您可以直接修改數組,正如其他人所指出的,或存儲引用數組中的一個Object實例(引用值)。然後修改該實例的屬性將修改所有對Object實例的引用。

var a = { 
    toString: function() { return String(this.valueOf()); }, 
    valueOf: function() { return this.value; } 
}; 

// … 

var cards = [2, 2, ..., a, a, a]; 

function processIt() 
{ 
    var playerCard1 = cards[48]; 

    if (totalPlayer > 11) 
    { 
    a.value = 1; 
    } 
    else 
    { 
    a.value = 11; 
    } 

    var cpu1 = document.getElementById("cpu1"); 
    cpu1.innerHTML = playerCard1; 
} 

訪問字符串或數字表達式中a然後將通過a產生提到的Object實例的value屬性的值:

/* y + a.valueOf() */ 
var x = y + a; 

/* z + a.toString() */ 
var y = z + String(a); 

你必須決定這兩種方法是否有意義你因爲我不太瞭解二十一點,所以你的問題很困惑。

順便說一句,你忘記聲明playerCard1這會導致它泄漏到外部執行上下文或導致運行時錯誤(ES 5.x嚴格模式)。我已經爲你修好了。一般而言,您希望將全局變量的數量減少到絕對必要的最小值。