2012-05-10 40 views
0

比方說,我有一個數據數組和變量(或多個變量)動態級聯

var i = 1; 
var arr = { 
     1: ['whatever' + i,'there are ' + i + ' dogs in the yard.', etc], 
    } 

有沒有辦法來動態地在稍後更新數組中的變量(一個或多個)功能?

所以

function start() { 
i++; 
alert(arr[1][0]); 
} 

將輸出「whatever2」而不是「whatever1」

+2

你是什麼意思'更新變量'?請更好地解釋它 –

+0

你的問題並不清楚......如果你稍後考慮改變'i',那是不可能的。 ''無論'+ i'和''在院子裏有'+ i +'狗。'當數組被定義時被評估,即'i'的值在那個時刻被確定*並且該值是與其他字符串連接。 –

+0

創意解決方案,謝謝大家。 – Stephen

回答

1

你可以使用函數來代替:

var i = 1; 
var arr = { 
    1: [ 
     function() { return 'whatever' + i }, 
     function() { return 'there are ' + i + ' dogs in the yard.' }, 
     function() { return 'etc' } 
    ], 
}: 

這將改變您的來電到:

function start() { 
    i++; 
    alert(arr[1][0]()); 
} 
+0

聰明。這是最接近我想要的。謝謝! – Stephen

2

你可以有你需要一個數組和push()東西,但該字符串由時,它不會改變了。

var array = ['whatever',i,'there are ',i,' dogs in the yard.']; 
array.push('more stuff'); 
array.push('even more stuff'); 
var string = array.join('') 
//string = 'whatever[whatever "i" is during join]there are[whatever "i" is during join]dogs in the yard.more stuffeven more stuff' 
1

試試這個代碼:

var arr = function(i){ 
    return { 
     1: ['whatever' + i,'there are ' + i + ' dogs in the yard.', etc], 
    } 
} 
var anyNumber = 1; 
var updatedVar = arr(anyNumber); 
1

您可以使用eval():

var i = 1; 
    var arr = { 
      1: ["'whatever' + i","'there are ' + i + ' dogs in the yard.'"], 
     } 
    function start() { 
    i++; 
    alert(eval(arr[1][0])); 
    } 
+0

這將工作,但我寧願質疑應用程序的設計,然後... –