2013-01-07 36 views
0

我想保存每個點擊數據並添加到數組中。我試過這個jquery保存數組中的數據

var data = []; 
var save = []; 
s=0; 
i=0; 

some called function(){ 
    data[i++] = some result; 
    data[i++] = some other result; 
} 

$('#someelement').click(function(){ 
save[s++] = data; 
console.log(save); // for debugging 
i = 0; 
data = ''; 
}); 

第一次保存工作,但在那之後我只是添加了空數組。任何指針?

+3

附加到JavaScript數組用'.push:

下面是工作示例。 'data.push('some result')' –

+0

不要在單擊處理程序結束時將'data'設置爲空字符串。 – nnnnnn

+0

@nnnnnn我知道了,一個電話讓我不注意我的愚蠢評論 –

回答

3

這是因爲你用字符串替換陣列。

data = ''; 

您應該將其替換爲新的Array。

data = []; 

,或者是附加的data淺拷貝到save,然後清除data重用data陣列。

save[s++] = data.slice(); 

data.length = i = 0; 

這允許具有參考data保留其參考,使得它總是觀看該正在更新的data任何其他代碼。

+0

可能不想用'data.length = 0'來重複使用同一個數組,因爲那麼'save'的所有元素都會指向到相同(空)陣列... – nnnnnn

+0

@nnnnnn:你說得對。我忘記了'save'數組獲得對'data'數組的引用。我會更新。 –

0

如果你想將數據的當前內容添加到保存單個元素,使用Array.push

$('#someelement').click(function(){ 
    save.push(data); 
    console.log(save); // for debugging 
    i = 0; 
    data = []; 
}); 

...或者如果它要在data當前值加入到save使用Array.concat,重置data回一個空數組:

$('#someelement').click(function(){ 
    save = save.concat(data); 
    console.log(save); // for debugging 
    data = []; 
}); 
0

您可以使用此:

data[data.length] = <some value>; 
1

你可能想嘗試使數據數組的副本:

save[s++] = data.slice(0); 

這樣一來,無論發生什麼事,以數據數組不會影響儲存陣列的項目。

0

您應該使用[]創建新陣列。 ()`,不通過用遞增索引搞亂

<script> 
    var data = []; 
    var save = []; 
    s=0; 
    i=0; 

function addRes(){ 
    data[i++] = 'some result'; 
    data[i++] = 'some other result'; 
} 

$('#someelement').click(function(){ 
    addRes(); 
    save[s++] = data; 
    console.log(save); // for debugging 
    i = 0; 
    data = []; 
}); 
</script>