2013-05-26 53 views
0

我想要做的是創建兩個相同的數組。當我在輸入字段中更改數值並單擊按鈕時,我只想更改第二個數組中的值。但是,當我這樣做時,出於某種奇怪的原因,它會更改兩個數組中的值?任何想法我做錯了什麼?如何創建兩個相同的數組並更改一個數值?

這裏是我的代碼的簡化版本:

的Javascript:

var arr1=[], 

    arr2=[]; 

$(':input').each(function() 
{ 
    var id = $(this).attr('id'); 

    arr1[id] = arr2[id] = {'text': $(this).val()}; 
}); 

$('#click').click(function() 
{ 
    $(':input').each(function() 
    { 
     arr2[$(this).attr('id')].text = $(this).val(); 
    }); 

    alert(arr1['whatever'].text + '\n\n' + arr2['whatever'].text); 

    return false; 
}); 

HTML:

<input type="text" id="whatever" value="test"> 
<br><br> 
<button type="button" id="click">Click</button> 

Here is an example,即,當我在輸入字段中更改值到test2並點擊按鈕,它顯示我改變了兩個數組中的值。

如果可能,我不想改變創建這些數組的方式,例如, arr[id] = {'text': $(this).val()}。除非這是問題所在。

回答

4

你存儲的對象陣列

arr1[id] = arr2[id] = {'text': $(this).val()}; 

對象採取的ByRef,不BYVAL,所以他們不只是平等,他們相同的內存位,並改變一個變化。你可能想讓他們像這樣;

var val = $(this).val(); 
arr1[id] = {'text': val}; 
arr2[id] = {'text': val}; 
+0

這實際上是一個騙局,但你添加了關於* Ref *和* Val *的東西,所以你有我的+1 –

+0

謝謝,那就是了!並感謝您的解釋! :)一旦8分鐘結束,我會接受答案。 – isuckatcoding

2

使用slice()

var array2 = array1.slice(0); 
+0

我相信'slice'的第一個參數是必需的,所以'slice(0)' –

+0

謝謝Kolink。更新。 – ahren

2

如果分配的雙重價值,兩個不同的變量,他們將都具有相同的價值,但是當你改變一個更改第二了。

$(':input').each(function() { 
    var id = $(this).attr('id'), 
     val = $(this).val(); 
    arr1[id] = {'text': val}; 
    arr2[id] = {'text': val}; 
}); 
+0

也謝謝你! – isuckatcoding

+2

+1工作解決方案,但您的文本只適用於_Object_,請考慮'a = b = 1; a = 0; b === 1; // true'和'a === b; // false' –

相關問題